diff options
| author | Michel Etienne | 2012-07-09 23:02:43 +0200 |
|---|---|---|
| committer | Michel Etienne | 2012-07-09 23:02:43 +0200 |
| commit | b7787611dcf9ab4b4ef9d3c430554ef036b2b1f9 (patch) | |
| tree | e6ac68a990810a1dd2fa8809a4f399b28a8098c9 | |
| parent | 3cf46d6cbe8f490ad1338ae40bf4d1ec8fcbd2d4 (diff) | |
| parent | 70b9756a1b3aadbdbb3ccd9cbb0503e524df53e1 (diff) | |
| download | chouette-core-b7787611dcf9ab4b4ef9d3c430554ef036b2b1f9.tar.bz2 | |
Merge branch 'master' of chouette.dryade.priv:/srv/git/chouette2
27 files changed, 144 insertions, 34 deletions
@@ -68,6 +68,7 @@ group :test, :development do gem "remarkable", "~> 4.0.0.alpha4" gem "remarkable_activerecord", "~> 4.0.0.alpha4" gem "shoulda-matchers" + gem 'rb-inotify', :platform => :ruby end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 3b408e69c..fb77065c6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -371,6 +371,7 @@ DEPENDENCIES pg (~> 0.11.0) rails (= 3.2.6) ransack + rb-inotify remarkable (~> 4.0.0.alpha4) remarkable_activerecord (~> 4.0.0.alpha4) rspec diff --git a/app/assets/javascripts/exports.js.coffee b/app/assets/javascripts/exports.js.coffee index 025f9fcce..6de0d4692 100644 --- a/app/assets/javascripts/exports.js.coffee +++ b/app/assets/javascripts/exports.js.coffee @@ -1,18 +1,23 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ - jQuery -> export_references_type_change = (event) -> - references_type = $("select option:selected").attr("value") + references_type = $(event.target).val() toggle_input = (li) -> + console.log(li) enabled = (li.data("type") == references_type) # Hide li block li.toggle(enabled) # Disable textarea to ignore it in POST data li.find("textarea").attr("disabled", ! enabled) - toggle_input($(li)) for li in $(".export_reference_ids") + toggle_input($(li)) for li in $(event.target).parents('form').find("li.export_reference_ids") + + $('select[name="export[references_type]"]').change(export_references_type_change) + + $('#export_type_submit').hide() + + export_type_change = (event) -> + export_type = $("select option:selected").attr("value") + $(form).toggle($(form).is("#" + export_type + "_new")) for form in $('form.export') - $('#export_references_type').change(export_references_type_change) + $('#export_type').change(export_type_change) diff --git a/app/assets/javascripts/imports.js.coffee b/app/assets/javascripts/imports.js.coffee index 7fb49e44d..ba7372e13 100644 --- a/app/assets/javascripts/imports.js.coffee +++ b/app/assets/javascripts/imports.js.coffee @@ -1,7 +1,3 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ - jQuery -> $('#import_type_submit').hide() diff --git a/app/assets/stylesheets/exports.css.scss b/app/assets/stylesheets/exports.css.scss index cb8f23dc4..0af4af23a 100644 --- a/app/assets/stylesheets/exports.css.scss +++ b/app/assets/stylesheets/exports.css.scss @@ -39,3 +39,18 @@ } } } + +#workspace.exports.new form.new_export { + padding: 0.5em 0; + margin-top: -0.5em; + margin-bottom: 1em; + + label { + display: block; + width: 25%; + float: left; + } + select { + width: 25%; + } +}
\ No newline at end of file diff --git a/app/assets/stylesheets/journey_patterns.css.scss b/app/assets/stylesheets/journey_patterns.css.scss index 7e9a747a5..5981c76b0 100644 --- a/app/assets/stylesheets/journey_patterns.css.scss +++ b/app/assets/stylesheets/journey_patterns.css.scss @@ -23,6 +23,7 @@ /* to create multi-column index */ width: 350px; padding-right: 10px; + height: 60px; float: left; .name { @@ -38,6 +39,9 @@ #route_color{ width: 100px; color: white; font-weight: bold;} + #journey_pattern_stop_point_ids_input fieldset .choices-group { + margin-top: 25px; + } } #workspace.journey_patterns.show diff --git a/app/controllers/exports_controller.rb b/app/controllers/exports_controller.rb index ee7e186b9..3b8fee566 100644 --- a/app/controllers/exports_controller.rb +++ b/app/controllers/exports_controller.rb @@ -5,8 +5,15 @@ class ExportsController < ChouetteController belongs_to :referential + def new + new! do + available_exports + end + end + def create create! do |success, failure| + available_exports success.html { redirect_to referential_exports_path(@referential) } end end @@ -28,6 +35,16 @@ class ExportsController < ChouetteController protected + def available_exports + @available_exports ||= Export.types.collect do |type| + unless @export.type == type + @referential.exports.build :type => type + else + @export + end + end + end + # FIXME why #resource_id is nil ?? def build_resource super.tap do |export| diff --git a/app/controllers/stop_areas_controller.rb b/app/controllers/stop_areas_controller.rb index 8d68fd1d5..8d55a49d5 100644 --- a/app/controllers/stop_areas_controller.rb +++ b/app/controllers/stop_areas_controller.rb @@ -58,11 +58,6 @@ class StopAreasController < ChouetteController edit! end -# def update -# puts :resource -# update! -# end - protected alias_method :stop_area, :resource diff --git a/app/helpers/exports_helper.rb b/app/helpers/exports_helper.rb index 1b441f995..55bbafb72 100644 --- a/app/helpers/exports_helper.rb +++ b/app/helpers/exports_helper.rb @@ -21,6 +21,10 @@ module ExportsHelper "export_reference_#{relation_name}_ids" end + def input_class + "export_#{relation_name}_reference_ids" + end + end def export_references_input(form, export, type) @@ -34,7 +38,7 @@ module ExportsHelper @form, @export, @type_helper = form, export, type_helper end - delegate :input_id, :type, :to => :type_helper + delegate :input_id, :type, :input_class, :to => :type_helper def current? export.references_type == type @@ -56,6 +60,7 @@ module ExportsHelper def input_html_options { :id => input_id, + :class => input_class, :"data-pre" => ( references_map.to_json if current? ), :disabled => (true unless current?) } diff --git a/app/helpers/journey_patterns_helper.rb b/app/helpers/journey_patterns_helper.rb index d7b66db06..bcfb71cd1 100644 --- a/app/helpers/journey_patterns_helper.rb +++ b/app/helpers/journey_patterns_helper.rb @@ -8,5 +8,10 @@ module JourneyPatternsHelper truncate(journey_pattern.name, :length => 30) end end + def stop_point_ids_label(journey_pattern) + return journey_pattern.human_attribute_name(:stop_point_ids) if journey_pattern.vehicle_journeys.empty? + + "#{journey_pattern.human_attribute_name(:stop_point_ids)}. #{t('journey_patterns.form.warning', :count => journey_pattern.vehicle_journeys.count)}" + end end diff --git a/app/models/csv_export.rb b/app/models/csv_export.rb new file mode 100644 index 000000000..4afacf81a --- /dev/null +++ b/app/models/csv_export.rb @@ -0,0 +1,7 @@ +class CsvExport < Export + + def export_options + super.merge(:format => :csv) + end + +end diff --git a/app/models/export.rb b/app/models/export.rb index a83d89958..d3a73b1ff 100644 --- a/app/models/export.rb +++ b/app/models/export.rb @@ -84,14 +84,6 @@ class Export < ActiveRecord::Base log_messages.create :key => status end - def self.new(attributes = {}, options = {}, &block) - if self == Export - Object.const_get(attributes.delete(:type) || "NeptuneExport").new(attributes, options) - else - super - end - end - @@references_types = [ Chouette::Line, Chouette::Network, Chouette::Company ] cattr_reader :references_types @@ -143,4 +135,22 @@ class Export < ActiveRecord::Base read_attribute :reference_ids end + def self.types + unless Rails.env.development? + subclasses.map(&:to_s) + else + # FIXME + %w{NeptuneExport CsvExport GtfsExport} + end + end + + def self.new(attributes = {}, options = {}, &block) + if self == Export + Object.const_get(attributes.delete(:type) || "NeptuneExport").new(attributes, options) + else + super + end + end + end + diff --git a/app/models/gtfs_export.rb b/app/models/gtfs_export.rb new file mode 100644 index 000000000..8edad4b1f --- /dev/null +++ b/app/models/gtfs_export.rb @@ -0,0 +1,7 @@ +class GtfsExport < Export + + def export_options + super.merge(:format => :gtfs) + end + +end diff --git a/app/views/exports/new.html.erb b/app/views/exports/new.html.erb index 82409955b..36a37abc4 100644 --- a/app/views/exports/new.html.erb +++ b/app/views/exports/new.html.erb @@ -1,7 +1,16 @@ <%= title_tag t(".title") %> -<%= semantic_form_for [@referential, @export], :as => :export, :url => referential_exports_path(@referential) do |form| %> +<%= form_for([@referential, @export], :as => :export, :url => new_referential_export_path(@referential), :method => :get) do |form| %> + <%= form.label :type %> + <%= form.collection_select :type, Export.types, :to_s, :to_s %> + <%= form.submit "Sélectionner", :id => "export_type_submit" %> +<% end %> + +<% @available_exports.each do |export| %> +<%= semantic_form_for [@referential, export], :as => :export, :url => referential_exports_path(@referential), :html => { :id => "#{export.type}_new", :style => ('display: none' unless @export == export)} do |form| %> <%= form.inputs do %> + <%= form.input :type, :as => :hidden %> + <%= form.input :references_type, :as => :select, :collection => Export.references_types.map { |c| [ c.model_name.human.capitalize.pluralize, c.name ] }, :include_blank => t(".all") %> <% Export.references_types.each do |type| %> @@ -14,5 +23,6 @@ <%= form.action :cancel, :as => :link %> <% end %> <% end %> +<% end %> <%= javascript_include_tag new_referential_export_path(@referential, :format => :js) %> diff --git a/app/views/exports/new.js.coffee b/app/views/exports/new.js.coffee index 198af96c8..4a1d59f92 100644 --- a/app/views/exports/new.js.coffee +++ b/app/views/exports/new.js.coffee @@ -1,4 +1,4 @@ jQuery -> <% Export.references_types.each do |type| %> - $("#<%= export_references_type(type).input_id %>" ).tokenInput('<%= references_referential_exports_path(@referential, :type => export_references_type(type).relation_name, :format => :json) %>', { prePopulate: $('#').data('pre'), minChars: 3 }); + $("textarea.<%= export_references_type(type).input_class %>").tokenInput('<%= references_referential_exports_path(@referential, :type => export_references_type(type).relation_name, :format => :json) %>', { prePopulate: $('#').data('pre'), minChars: 3 }); <% end %> diff --git a/app/views/journey_patterns/_form.html.erb b/app/views/journey_patterns/_form.html.erb index ed68bb4c8..9d7454b72 100644 --- a/app/views/journey_patterns/_form.html.erb +++ b/app/views/journey_patterns/_form.html.erb @@ -4,7 +4,7 @@ <%= form.input :published_name %> <%= form.input :registration_number %> <%= form.input :comment %> - <%= form.input :stop_point_ids, :as => :check_boxes, :collection => @route.stop_points.map { |s| [s.stop_area.name, s.id.to_s]}, :input_html => (@journey_pattern.new_record? ? { :checked => 'checked' }:{}) %> + <%= form.input :stop_point_ids, :label => stop_point_ids_label(@journey_pattern), :as => :check_boxes, :collection => @route.stop_points.map { |s| [s.stop_area.name, s.id.to_s]}, :input_html => (@journey_pattern.new_record? ? { :checked => 'checked' }:{}) %> <%= form.input :objectid, :input_html => { :disabled => !@journey_pattern.new_record? } %> <% end %> diff --git a/app/views/journey_patterns/_journey_pattern.html.erb b/app/views/journey_patterns/_journey_pattern.html.erb index 41a898888..bf0f84fb1 100644 --- a/app/views/journey_patterns/_journey_pattern.html.erb +++ b/app/views/journey_patterns/_journey_pattern.html.erb @@ -8,6 +8,9 @@ <%= t('.vehicle_journeys_count', :count => journey_pattern.vehicle_journeys.count) %> <div class="actions"> <%= link_to t("actions.destroy"), referential_line_route_journey_pattern_path(@referential, @line, @route, journey_pattern), :method => :delete, :confirm => t('journey_patterns.actions.destroy_confirm'), :class => "remove" %> + <% if journey_pattern.vehicle_journeys.count > 0 %> + | <%= link_to t('journey_patterns.journey_pattern.vehicle_journey_at_stops'), referential_line_route_vehicle_journeys_path(@referential, @line, @route, :q => {:journey_pattern_id_eq => journey_pattern.id}), :class => "link" %> + <% end %> </div> </div> <% end %> diff --git a/app/views/journey_patterns/show.html.erb b/app/views/journey_patterns/show.html.erb index 0b9676350..9962e4d8b 100644 --- a/app/views/journey_patterns/show.html.erb +++ b/app/views/journey_patterns/show.html.erb @@ -57,6 +57,7 @@ <ul class="actions"> <li><%= link_to t('journey_patterns.actions.edit'), edit_referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern), :class => "edit" %></li> <li><%= link_to t('journey_patterns.actions.destroy'), referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern), :method => :delete, :confirm => t('journey_patterns.actions.destroy_confirm'), :class => "remove" %></li> + <li><%= link_to t('journey_patterns.journey_pattern.vehicle_journey_at_stops'), referential_line_route_vehicle_journeys_path(@referential, @line, @route, :q => {:journey_pattern_id_eq => @journey_pattern.id}), :class => "link" %></li> </ul> <% end %> diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb index 26c5b4070..83993e4d7 100644 --- a/app/views/vehicle_journeys/show.html.erb +++ b/app/views/vehicle_journeys/show.html.erb @@ -83,7 +83,7 @@ <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, :confirm => t('vehicle_journeys.actions.destroy_confirm'), :class => "remove" %></li> </ul> - <h3>Cloner la course</h3> + <h3><%= t('.translation_form') %></h3> <div id="compact_form" > <%= semantic_form_for [@referential, @line, @route, @vehicle_journey, VehicleTranslation.new] do |form| %> <%= form.inputs do %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 179c14ca5..55696eef5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -3,3 +3,6 @@ en: hello: "Hello world" + time: + formats: + hour: "%H:%M" diff --git a/config/locales/journey_patterns.yml b/config/locales/journey_patterns.yml index 86257f784..301c4b7e7 100644 --- a/config/locales/journey_patterns.yml +++ b/config/locales/journey_patterns.yml @@ -4,6 +4,7 @@ en: from_to: "From '%{departure}' to '%{arrival}'" stop_count: "%{count}/%{route_count} stops" vehicle_journeys_count: "Vehicle journeys: %{count}" + vehicle_journey_at_stops: "Vehicle journey at stops" actions: new: Add a new journey_pattern edit: Edit this journey pattern @@ -18,6 +19,8 @@ en: stop_points: "Stop point on journey pattern list" index: title: Journey Patterns + form: + warning: "Be careful, selection is also applied to the %{count} vehicle journeys associated to this journey pattern" activerecord: models: journey_pattern: @@ -43,6 +46,7 @@ fr: from_to: "De '%{departure}' à '%{arrival}'" stop_count: "%{count}/%{route_count} arrêts" vehicle_journeys_count: "Courses: %{count}" + vehicle_journey_at_stops: "Horaires des courses" actions: new: Ajouter une mission edit: Modifier cette mission @@ -57,6 +61,8 @@ fr: stop_points: "Liste des arrêts de la mission" index: title: Missions + form: + warning: "Attention, la sélection s'applique aussi aux %{count} courses de la mission" activerecord: models: journey_pattern: diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml index bc6a05427..c52dbb62a 100644 --- a/config/locales/vehicle_journeys.yml +++ b/config/locales/vehicle_journeys.yml @@ -31,6 +31,7 @@ en: time_tables: Calendars list bounding: From %{start} to %{end} validation: Clone + translation_form: Vehicle journey translations index: title: Vehicle journeys on route %{route} vehicle_journeys: "Departure's times" @@ -104,6 +105,7 @@ fr: time_tables: Liste des calendriers bounding: De %{start} à %{end} validation: Cloner + translation_form: Cloner la course index: title: "Courses de la séquence d'arrêts %{route}" timeless: Courses sans horaire diff --git a/spec/models/csv_export_spec.rb b/spec/models/csv_export_spec.rb new file mode 100644 index 000000000..8c80ab8da --- /dev/null +++ b/spec/models/csv_export_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +describe CsvExport do + + its(:export_options) { should include(:format => :csv) } + +end diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb index 10fcf4b69..c59689f4a 100644 --- a/spec/models/export_spec.rb +++ b/spec/models/export_spec.rb @@ -38,7 +38,6 @@ describe Export do describe "#options" do it "should be empty by default" do - puts subject.options.class subject.options.should be_empty end @@ -47,8 +46,7 @@ describe Export do describe ".types" do it "should return available Export implementations" do - pending - Export.types.should =~ %w{NeptuneExport} + Export.types.should =~ %w{NeptuneExport CsvExport GtfsExport} end end diff --git a/spec/models/gtfs_export_spec.rb b/spec/models/gtfs_export_spec.rb new file mode 100644 index 000000000..4bc587f14 --- /dev/null +++ b/spec/models/gtfs_export_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +describe GtfsExport do + + its(:export_options) { should include(:format => :gtfs) } + +end diff --git a/spec/models/neptune_export_spec.rb b/spec/models/neptune_export_spec.rb new file mode 100644 index 000000000..1b4f4afa9 --- /dev/null +++ b/spec/models/neptune_export_spec.rb @@ -0,0 +1,7 @@ +require 'spec_helper' + +describe NeptuneExport do + + its(:export_options) { should include(:format => :neptune) } + +end diff --git a/spec/requests/networks_spec.rb b/spec/requests/networks_spec.rb index f73724a48..ff020dca6 100644 --- a/spec/requests/networks_spec.rb +++ b/spec/requests/networks_spec.rb @@ -73,7 +73,6 @@ describe "Networks" do # subject.stub(:stop_areas).and_return(Array.new(2) { Factory(:stop_area) }) # visit referential_networks_path(referential) - # puts page.body # click_link "#{networks.first.name}" # click_link "Modifier ce réseau" # fill_in "Nom", :with => "Network 1" @@ -81,7 +80,6 @@ describe "Networks" do # click_button("Modifier Réseau") # page.should have_content("Network 1") # visit referential_network_path(referential, subject) - # puts page.body.inspect # click_link "Supprimer ce réseau" # page.evaluate_script('window.confirm = function() { return true; }') # click_button "Valider" |
