From a94b6b696990fd038cc425ed93f6971c1093e8cf Mon Sep 17 00:00:00 2001
From: Marc Florisson
Date: Fri, 6 Jul 2012 16:45:42 +0200
Subject: fix Refs #88, Refs #85, Refs #82
---
app/assets/stylesheets/journey_patterns.css.scss | 3 +-
app/assets/stylesheets/layout.css.scss | 23 +++++++++
app/assets/stylesheets/lines.css.scss | 9 ++--
app/assets/stylesheets/vehicle_journeys.css.scss | 35 +++++++++++++
app/controllers/vehicle_journeys_controller.rb | 4 ++
app/controllers/vehicle_translations_controller.rb | 24 +++++++++
app/models/vehicle_translation.rb | 49 ++++++++++++++++++
app/views/routes/show.html.erb | 18 ++++---
.../_timeless_vehicle_journey.html.erb | 15 ++++++
app/views/vehicle_journeys/index.html.erb | 5 +-
app/views/vehicle_journeys/show.html.erb | 26 +++++++---
app/views/vehicle_journeys/timeless.html.erb | 28 ++++++++++
config/locales/routes.yml | 4 ++
config/locales/vehicle_journeys.yml | 13 +++++
config/locales/vehicle_translations.yml | 19 +++++++
config/routes.rb | 6 +--
spec/factories.rb | 5 ++
spec/models/vehicle_translation_spec.rb | 60 ++++++++++++++++++++++
18 files changed, 325 insertions(+), 21 deletions(-)
create mode 100644 app/controllers/vehicle_translations_controller.rb
create mode 100644 app/models/vehicle_translation.rb
create mode 100644 app/views/vehicle_journeys/_timeless_vehicle_journey.html.erb
create mode 100644 app/views/vehicle_journeys/timeless.html.erb
create mode 100644 config/locales/vehicle_translations.yml
create mode 100644 spec/models/vehicle_translation_spec.rb
diff --git a/app/assets/stylesheets/journey_patterns.css.scss b/app/assets/stylesheets/journey_patterns.css.scss
index afba352bd..7e9a747a5 100644
--- a/app/assets/stylesheets/journey_patterns.css.scss
+++ b/app/assets/stylesheets/journey_patterns.css.scss
@@ -23,10 +23,11 @@
/* to create multi-column index */
width: 350px;
padding-right: 10px;
+ float: left;
.name {
line-height: 16px;
- float: left;
+ // float: left;
}
}
diff --git a/app/assets/stylesheets/layout.css.scss b/app/assets/stylesheets/layout.css.scss
index 79126e7ed..58d85b5a7 100644
--- a/app/assets/stylesheets/layout.css.scss
+++ b/app/assets/stylesheets/layout.css.scss
@@ -28,6 +28,29 @@ $text_color: #222;
}
}
+#sidebar div#compact_form {
+ form {
+ border-bottom: 1px solid #BBB;
+ fieldset {
+ padding: 0;
+ border: 0;
+ li {
+ padding: 0;
+ label { padding-left: 20px;
+ width: 70%;}
+ input { width: 20px; }
+ }
+ }
+ fieldset.actions {
+ margin-bottom: 0;
+ padding-left: 20px;
+ }
+ fieldset.inputs {
+ padding-top: 16px;
+ }
+ }
+}
+
#sidebar ul.selection li {
a {
padding-left: 20px;
diff --git a/app/assets/stylesheets/lines.css.scss b/app/assets/stylesheets/lines.css.scss
index f66f8badd..26cad4873 100644
--- a/app/assets/stylesheets/lines.css.scss
+++ b/app/assets/stylesheets/lines.css.scss
@@ -62,10 +62,13 @@
h3.routes { clear: both; }
.route {
+ @include div_for_object;
+ /* to create multi-column index */
+ width: 350px;
+ height: 65;
+ float: left;
+ padding-right: 10px;
margin-bottom: 0px;
- .info {
- margin-bottom: 30px;
- }
}
.summary p label {
diff --git a/app/assets/stylesheets/vehicle_journeys.css.scss b/app/assets/stylesheets/vehicle_journeys.css.scss
index 08db4cf25..5df48efbc 100644
--- a/app/assets/stylesheets/vehicle_journeys.css.scss
+++ b/app/assets/stylesheets/vehicle_journeys.css.scss
@@ -127,5 +127,40 @@
}
}
+#workspace.vehicle_journeys.timeless
+{
+ .summary p label {
+ font-weight: bold;
+ }
+
+ .vehicle_journey:after {
+ @include after_div_for_object;
+ }
+
+ .vehicle_journeys {
+ margin-top: 20px;
+ }
+
+ .vehicle_journeys:after {
+ @include content_to_clear;
+ }
+
+ .vehicle_journey {
+ @include div_for_object;
+ /* to create multi-column index */
+ width: 350px;
+ height: 65;
+ float: left;
+ padding-right: 10px;
+
+ span.included_day_type {
+ font-weight: bolder;
+ color: black;
+ }
+ span.excluded_day_type {
+ }
+ }
+}
+
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb
index 9248f88de..8c156d259 100644
--- a/app/controllers/vehicle_journeys_controller.rb
+++ b/app/controllers/vehicle_journeys_controller.rb
@@ -9,6 +9,10 @@ class VehicleJourneysController < ChouetteController
end
end
+ def timeless
+ @vehicle_journeys = parent.vehicle_journeys.select { |v| v.vehicle_journey_at_stops.empty? }
+ end
+
def select_journey_pattern
if params[:journey_pattern_id]
selected_journey_pattern = Chouette::JourneyPattern.find( params[:journey_pattern_id])
diff --git a/app/controllers/vehicle_translations_controller.rb b/app/controllers/vehicle_translations_controller.rb
new file mode 100644
index 000000000..af54001ae
--- /dev/null
+++ b/app/controllers/vehicle_translations_controller.rb
@@ -0,0 +1,24 @@
+class VehicleTranslationsController < ChouetteController
+ respond_to :html, :only => [:create]
+
+ belongs_to :referential do
+ belongs_to :line, :parent_class => Chouette::Line do
+ belongs_to :route, :parent_class => Chouette::Route do
+ belongs_to :vehicle_journey, :parent_class => Chouette::VehicleJourney
+ end
+ end
+ 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)
+ rescue
+ flash[:alert] = t('vehicle_translations.failure')
+ end
+ redirect_to referential_line_route_vehicle_journeys_path(@referential, @line, @route)
+
+ end
+
+end
diff --git a/app/models/vehicle_translation.rb b/app/models/vehicle_translation.rb
new file mode 100644
index 000000000..cb46a4558
--- /dev/null
+++ b/app/models/vehicle_translation.rb
@@ -0,0 +1,49 @@
+class VehicleTranslation
+ include ActiveModel::Validations
+ include ActiveModel::Conversion
+ extend ActiveModel::Naming
+
+
+ attr_accessor :vehicle_journey_id, :count, :duration
+
+ validates_presence_of :count, :duration
+
+ def initialize(attributes = {})
+ attributes.each do |name, value|
+ send("#{name}=", value)
+ end
+ end
+
+ def persisted?
+ false
+ end
+
+ def translate
+ vehicle = vehicle_journey
+ copied_attributes = vehicle_journey.attributes
+ copied_attributes.delete( "id")
+ copied_attributes.delete( "objectid")
+
+ 1.upto( count.to_i) do |index|
+ translated = Chouette::VehicleJourney.create( copied_attributes)
+ vehicle.vehicle_journey_at_stops.each do |vjas|
+ vjas_attributes = vjas.attributes.merge( "vehicle_journey_id" => translated.id)
+ vjas_attributes.merge! "departure_time" => ( vjas_attributes[ "departure_time"] + (index * duration.to_i.minutes) ),
+ "arrival_time" => ( vjas_attributes[ "arrival_time"] + (index * duration.to_i.minutes) )
+
+ Chouette::VehicleJourneyAtStop.create( vjas_attributes)
+ end
+
+ end
+ end
+
+ def vehicle_journey
+ Chouette::VehicleJourney.find( vehicle_journey_id)
+ end
+
+ def self.from_vehicle( vehicle)
+ VehicleTranslation.new( :vehicle_journey_id => vehicle.id,
+ :count => 0,
+ :translation => 5.minutes)
+ end
+end
diff --git a/app/views/routes/show.html.erb b/app/views/routes/show.html.erb
index 0666fdcf5..04b00f497 100644
--- a/app/views/routes/show.html.erb
+++ b/app/views/routes/show.html.erb
@@ -64,7 +64,7 @@
-
<%= t('.stop_points') %>
+<%= t('.stop_points') %>
+ <% content_for :sidebar do %>
+
+ - <%= 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, :confirm => t('vehicle_journeys.actions.destroy_confirm'), :class => "remove" %>
+
+ Cloner la course
+
+ <%= 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 %>
+
<% end %>
diff --git a/app/views/vehicle_journeys/timeless.html.erb b/app/views/vehicle_journeys/timeless.html.erb
new file mode 100644
index 000000000..af5ee93ea
--- /dev/null
+++ b/app/views/vehicle_journeys/timeless.html.erb
@@ -0,0 +1,28 @@
+<%= title_tag t('.title', :route => @route.name ) %>
+
+
+
+
+
+ <%= link_to line_formatted_name( @line), [@referential, @line] %>
+
+
+
+ <%= link_to @route.name, [@referential, @line, @route] %>
+
+
+
+
+<%= t('.vehicles_list') %>
+
+ <%= render :partial => "timeless_vehicle_journey", :collection => @vehicle_journeys, :as => :vehicle_journey %>
+
+
+<% content_for :sidebar do %>
+
+ -
+ <%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %>
+
+ - <%= link_to t('.vehicle_journeys'), [@referential, @line, @route, :vehicle_journeys], :class => "link" %>
+
+<% end %>
diff --git a/config/locales/routes.yml b/config/locales/routes.yml
index 7ab2ca623..36de61539 100644
--- a/config/locales/routes.yml
+++ b/config/locales/routes.yml
@@ -31,6 +31,8 @@ en:
positive: forward
negative: backward
line: Line
+ vehicle_journeys: Vehicle journeys
+ journey_patterns: Journey patterns
name: Name
published_name: Published name
comment: Comments
@@ -76,6 +78,8 @@ fr:
positive: Aller
negative: Retour
line: Ligne
+ vehicle_journeys: Courses
+ journey_patterns: Missions
name: Nom
published_name: Nom public
number: Indice
diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml
index 801163b82..bc6a05427 100644
--- a/config/locales/vehicle_journeys.yml
+++ b/config/locales/vehicle_journeys.yml
@@ -19,6 +19,10 @@ en:
departure: Departure
arrival: Arrival
time_tables: Associated calendars to vehicle journey
+ timeless:
+ title: Timeless vehicle journeys
+ vehicle_journeys: Vehicle journeys with times at stop
+ vehicles_list: Vehicles list
show:
title: Vehicle Journey %{vehicle journey}
stop_title: Stop
@@ -26,6 +30,7 @@ en:
arrival: Arrival
time_tables: Calendars list
bounding: From %{start} to %{end}
+ validation: Clone
index:
title: Vehicle journeys on route %{route}
vehicle_journeys: "Departure's times"
@@ -45,6 +50,7 @@ en:
line: Line
route: Route
journey_pattern: Journey Pattern
+ time_tables: Calendars
time_slot: Time Slot
company: Company
comment: Comments
@@ -86,6 +92,10 @@ fr:
departure: Départ
arrival: Arrivée
time_tables: Calendriers associés à la course
+ timeless:
+ title: Courses sans horaire
+ vehicle_journeys: Courses ayant des horaires
+ vehicles_list: Liste des courses
show:
title: "Course au départ de %{stop} à %{time} sur la séquence %{route}"
stop_title: Arrêt
@@ -93,8 +103,10 @@ fr:
arrival: Arrivée
time_tables: Liste des calendriers
bounding: De %{start} à %{end}
+ validation: Cloner
index:
title: "Courses de la séquence d'arrêts %{route}"
+ timeless: Courses sans horaire
vehicle_journeys: "Horaires de départ aux arrêts"
selection: Filtrer sur
selection_all: Tous
@@ -112,6 +124,7 @@ fr:
line: Ligne
route: "Séquence d'arrêt"
journey_pattern: Mission
+ time_tables: Calendriers
time_slot: Fréquence
company: Transporteur
comment: Commentaires
diff --git a/config/locales/vehicle_translations.yml b/config/locales/vehicle_translations.yml
new file mode 100644
index 000000000..f945cc81c
--- /dev/null
+++ b/config/locales/vehicle_translations.yml
@@ -0,0 +1,19 @@
+en:
+ vehicle_translations:
+ success: "%{count} vehicle journeys created by translation"
+ failure: "Fail when creating vehicle journeys by translation"
+ activemodel:
+ attributes:
+ vehicle_translation:
+ duration: Duration
+ count: Count
+fr:
+ vehicle_translations:
+ success: "%{count} course(s) crée(s) par translation"
+ failure: "Echec de la création de courses par tanslation"
+ activemodel:
+ attributes:
+ vehicle_translation:
+ duration: "Durée de l'intervalle (en minutes)"
+ count: "Quantité de courses à ajouter"
+
diff --git a/config/routes.rb b/config/routes.rb
index f74c74c28..6c3969f4f 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -37,9 +37,9 @@ ChouetteIhm::Application.routes.draw do
end
end
resources :vehicle_journeys do
- member do
- get 'select_journey_pattern'
- end
+ get 'timeless', :on => :collection
+ get 'select_journey_pattern', :on => :member
+ resources :vehicle_translations
end
resources :stop_points do
collection do
diff --git a/spec/factories.rb b/spec/factories.rb
index faf1fef94..8e62b3b64 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -33,4 +33,9 @@ FactoryGirl.define do
f.sequence(:key) { "key_#{n}" }
end
+ factory :vehicle_translation do |f|
+ f.count 1
+ f.duration 1
+ end
+
end
diff --git a/spec/models/vehicle_translation_spec.rb b/spec/models/vehicle_translation_spec.rb
new file mode 100644
index 000000000..2a9c53371
--- /dev/null
+++ b/spec/models/vehicle_translation_spec.rb
@@ -0,0 +1,60 @@
+require 'spec_helper'
+
+describe VehicleTranslation do
+ let!(:company){ Factory(:company )}
+ let!(:journey_pattern){Factory(:journey_pattern)}
+ let!(:vehicle_journey){ Factory(:vehicle_journey,
+ :objectid => "dummy",
+ :journey_pattern => journey_pattern,
+ :route => journey_pattern.route,
+ :company => company,
+ :transport_mode => Chouette::TransportMode.new("metro"),
+ :published_journey_name => "dummy"
+ )}
+ subject {Factory.build(:vehicle_translation, :vehicle_journey_id => vehicle_journey.id)}
+
+ describe "#translate" do
+ it "should add new vehicle" do
+ count_before = Chouette::VehicleJourney.count
+ subject.translate
+ count_after = Chouette::VehicleJourney.count
+ count_after.should == count_before + subject.count.to_i
+ end
+ def last_created_vehicle
+ Chouette::VehicleJourney.find( :all, :order => :creation_time).last
+ end
+ it "should add vehicle having same published_journey_name" do
+ subject.translate
+ last_created_vehicle.published_journey_name.should == vehicle_journey.published_journey_name
+ end
+ it "should add vehicle having same transport_mode" do
+ subject.translate
+ 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
+ end
+ it "should add vehicle having same route" do
+ subject.translate
+ 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
+ end
+ it "should add vehicle with as many vehicle_journey_at_stops as on basic vehicle" do
+ subject.translate
+ last_created_vehicle.vehicle_journey_at_stops.count.should == vehicle_journey.vehicle_journey_at_stops.count
+ end
+ it "should add vehicle where vehicle_journey_at_stops are translated with #duration" do
+ read_vehicle = Chouette::VehicleJourney.find(vehicle_journey.id) # read from bd, change time values
+ subject.translate
+ last_created_vehicle.vehicle_journey_at_stops.each_with_index do |vjas, index|
+ vjas.departure_time.should == (read_vehicle.vehicle_journey_at_stops[index].departure_time + subject.duration.minutes)
+ vjas.arrival_time.should == (read_vehicle.vehicle_journey_at_stops[index].arrival_time + subject.duration.minutes)
+ end
+ end
+ end
+end
+
--
cgit v1.2.3
From ea483438db92d2d8c46717e2fc20ea1417e2c4b6 Mon Sep 17 00:00:00 2001
From: Marc Florisson
Date: Fri, 6 Jul 2012 19:58:28 +0200
Subject: update gem ninoxe
---
Gemfile.lock | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index b5fc3e90e..334ded324 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,6 +1,6 @@
GIT
remote: git://chouette.dryade.priv/ninoxe
- revision: 34f3b94569b35d8ce51e2b036c12e067e2222eec
+ revision: cebb174290257773b95eb663cdcb107dccf1fca6
specs:
ninoxe (0.0.8)
GeoRuby
--
cgit v1.2.3