<% unless @vehicle_journey.vehicle_journey_at_stops.empty? ||
@vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %>
<%= 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| %>
+
+ <%= render "shared/flash_messages" %>
+ <%= form.inputs do %>
+ <%= form.input :duration %>
+ <%= form.input :count %>
+ <% end %>
+
+
+
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('vehicle_journeys.actions.edit'), edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :class => "edit" %>
- <%= 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" %>
-
-
<%= 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| %>
-
+
-
-
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
--
cgit v1.2.3