aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorMarc Florisson2014-08-21 16:38:25 +0200
committerMarc Florisson2014-08-21 16:38:25 +0200
commit194bb28c4acbc144493c2096341d9126ffeaae35 (patch)
treedd7cb0ad2632cf92f94c1e5f6f98a58c2b185ff6 /app
parentbeed6b8df8d86c86b69fcca2b602bf40e36dcb75 (diff)
parent0bc1d3150175f7db4942003af9a5ba641cce3ffd (diff)
downloadchouette-core-194bb28c4acbc144493c2096341d9126ffeaae35.tar.bz2
Merge branch 'sismo_vj_translate' into sismo
Diffstat (limited to 'app')
-rw-r--r--app/controllers/vehicle_translations_controller.rb35
-rw-r--r--app/models/vehicle_translation.rb58
-rw-r--r--app/views/vehicle_journeys/show.html.erb32
-rw-r--r--app/views/vehicle_translations/_translate_form.html.erb37
-rw-r--r--app/views/vehicle_translations/new.js.erb4
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">&times;</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);
+
+