aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--.travis.yml45
-rw-r--r--CHANGELOG.md16
-rw-r--r--Gemfile109
-rw-r--r--Gemfile.lock111
-rw-r--r--README.md2
-rw-r--r--app/assets/images/icons/edit-disabled.pngbin0 -> 333 bytes
-rw-r--r--app/assets/javascripts/access_points.coffee (renamed from app/assets/javascripts/access_points.js.coffee)0
-rw-r--r--app/assets/javascripts/application.js4
-rw-r--r--app/assets/javascripts/bootstrap.coffee (renamed from app/assets/javascripts/bootstrap.js.coffee)0
-rw-r--r--app/assets/javascripts/compliance_check_tasks/index.coffee (renamed from app/assets/javascripts/compliance_check_tasks/index.js.coffee)0
-rw-r--r--app/assets/javascripts/compliance_check_tasks/new.coffee (renamed from app/assets/javascripts/compliance_check_tasks/new.js.coffee)0
-rw-r--r--app/assets/javascripts/compliance_checks/report.coffee (renamed from app/assets/javascripts/compliance_checks/report.js.coffee)0
-rw-r--r--app/assets/javascripts/export_tasks/new.coffee31
-rw-r--r--app/assets/javascripts/export_tasks/new.js.coffee14
-rw-r--r--app/assets/javascripts/exports/index.coffee (renamed from app/assets/javascripts/exports/index.js.coffee)0
-rw-r--r--app/assets/javascripts/group_of_line.coffee (renamed from app/assets/javascripts/group_of_line.js.coffee)0
-rw-r--r--app/assets/javascripts/help.coffee (renamed from app/assets/javascripts/help.js.coffee)0
-rw-r--r--app/assets/javascripts/import_tasks.coffee (renamed from app/assets/javascripts/import_tasks.js.coffee)22
-rw-r--r--app/assets/javascripts/import_tasks/index.coffee (renamed from app/assets/javascripts/import_tasks/index.js.coffee)0
-rw-r--r--app/assets/javascripts/journey_pattern.coffee (renamed from app/assets/javascripts/journey_pattern.js.coffee)0
-rw-r--r--app/assets/javascripts/lines/index.coffee (renamed from app/assets/javascripts/lines/index.js.coffee)0
-rw-r--r--app/assets/javascripts/multiple_selection.coffee (renamed from app/assets/javascripts/multiple_selection.js.coffee)0
-rw-r--r--app/assets/javascripts/partials/ie_report.js.coffee.erb3
-rw-r--r--app/assets/javascripts/plugins/proj4js-defs.js13
-rw-r--r--app/assets/javascripts/plugins/tooltip.coffee3
-rw-r--r--app/assets/javascripts/plugins/tooltip.js.coffee3
-rw-r--r--app/assets/javascripts/route.coffee (renamed from app/assets/javascripts/route.js.coffee)0
-rw-r--r--app/assets/javascripts/route_section.js.coffee93
-rw-r--r--app/assets/javascripts/rule_parameter_set.coffee (renamed from app/assets/javascripts/rule_parameter_set.js.coffee)0
-rw-r--r--app/assets/javascripts/stop_areas/edit.coffee (renamed from app/assets/javascripts/stop_areas/edit.js.coffee)0
-rw-r--r--app/assets/javascripts/stop_areas/index.coffee (renamed from app/assets/javascripts/stop_areas/index.js.coffee)0
-rw-r--r--app/assets/javascripts/time_tables.coffee (renamed from app/assets/javascripts/time_tables.js.coffee)0
-rw-r--r--app/assets/javascripts/timebands.coffee3
-rw-r--r--app/assets/javascripts/tools.coffee32
-rw-r--r--app/assets/javascripts/vehicle_journey.coffee (renamed from app/assets/javascripts/vehicle_journey.js.coffee)20
-rw-r--r--app/assets/javascripts/vehicle_journey_frequencies.coffee (renamed from app/assets/javascripts/vehicle_journey_import.js.coffee)0
-rw-r--r--app/assets/javascripts/vehicle_journey_frequencies/index.coffee4
-rw-r--r--app/assets/javascripts/vehicle_journey_import.coffee0
-rw-r--r--app/assets/javascripts/vehicle_journeys/index.coffee (renamed from app/assets/javascripts/vehicle_journeys/index.js.coffee)1
-rw-r--r--app/assets/javascripts/vehicle_journeys/show.coffee (renamed from app/assets/javascripts/vehicle_journeys/show.js.coffee)0
-rw-r--r--app/assets/stylesheets/application.scss.erb (renamed from app/assets/stylesheets/application.css.scss.erb)3
-rw-r--r--app/assets/stylesheets/main/access_links.scss (renamed from app/assets/stylesheets/main/access_links.css.scss)0
-rw-r--r--app/assets/stylesheets/main/access_points.scss (renamed from app/assets/stylesheets/main/access_points.css.scss)0
-rw-r--r--app/assets/stylesheets/main/api_keys.scss (renamed from app/assets/stylesheets/main/api_keys.css.scss)3
-rw-r--r--app/assets/stylesheets/main/calendar.scss (renamed from app/assets/stylesheets/main/calendar.css.scss)0
-rw-r--r--app/assets/stylesheets/main/companies.scss (renamed from app/assets/stylesheets/main/companies.css.scss)0
-rw-r--r--app/assets/stylesheets/main/compliance_check_tasks.scss (renamed from app/assets/stylesheets/main/compliance_check_tasks.css.scss)0
-rw-r--r--app/assets/stylesheets/main/compliance_checks.scss (renamed from app/assets/stylesheets/main/compliance_checks.css.scss)0
-rw-r--r--app/assets/stylesheets/main/connection_links.scss (renamed from app/assets/stylesheets/main/connection_links.css.scss)0
-rw-r--r--app/assets/stylesheets/main/errors.scss (renamed from app/assets/stylesheets/main/errors.css.scss)0
-rw-r--r--app/assets/stylesheets/main/export_tasks.scss (renamed from app/assets/stylesheets/main/export_tasks.css.scss)0
-rw-r--r--app/assets/stylesheets/main/exports.scss (renamed from app/assets/stylesheets/main/exports.css.scss)0
-rw-r--r--app/assets/stylesheets/main/group_of_lines.scss (renamed from app/assets/stylesheets/main/group_of_lines.css.scss)0
-rw-r--r--app/assets/stylesheets/main/help.scss (renamed from app/assets/stylesheets/main/help.css.scss)0
-rw-r--r--app/assets/stylesheets/main/import_tasks.scss (renamed from app/assets/stylesheets/main/import_tasks.css.scss)0
-rw-r--r--app/assets/stylesheets/main/imports.scss (renamed from app/assets/stylesheets/main/imports.css.scss)0
-rw-r--r--app/assets/stylesheets/main/journey_patterns.scss (renamed from app/assets/stylesheets/main/journey_patterns.css.scss)8
-rw-r--r--app/assets/stylesheets/main/layout.scss (renamed from app/assets/stylesheets/main/layout.css.scss)15
-rw-r--r--app/assets/stylesheets/main/lines.scss (renamed from app/assets/stylesheets/main/lines.css.scss)29
-rw-r--r--app/assets/stylesheets/main/networks.scss (renamed from app/assets/stylesheets/main/networks.css.scss)0
-rw-r--r--app/assets/stylesheets/main/organisations.scss (renamed from app/assets/stylesheets/main/organisations.css.scss)0
-rw-r--r--app/assets/stylesheets/main/referentials.scss (renamed from app/assets/stylesheets/main/referentials.css.scss)0
-rw-r--r--app/assets/stylesheets/main/route_sections.css.scss68
-rw-r--r--app/assets/stylesheets/main/routes.scss (renamed from app/assets/stylesheets/main/routes.css.scss)24
-rw-r--r--app/assets/stylesheets/main/rule_parameter_sets.scss (renamed from app/assets/stylesheets/main/rule_parameter_sets.css.scss)0
-rw-r--r--app/assets/stylesheets/main/simple_form.scss (renamed from app/assets/stylesheets/main/simple_form.css.scss)0
-rw-r--r--app/assets/stylesheets/main/stop_areas.scss (renamed from app/assets/stylesheets/main/stop_areas.css.scss)4
-rw-r--r--app/assets/stylesheets/main/stop_points.scss (renamed from app/assets/stylesheets/main/stop_points.css.scss)0
-rw-r--r--app/assets/stylesheets/main/subscriptions.scss (renamed from app/assets/stylesheets/main/subscriptions.css.scss)0
-rw-r--r--app/assets/stylesheets/main/time_table_combinations.scss (renamed from app/assets/stylesheets/main/time_table_combinations.css.scss)0
-rw-r--r--app/assets/stylesheets/main/time_tables.scss (renamed from app/assets/stylesheets/main/time_tables.css.scss)0
-rw-r--r--app/assets/stylesheets/main/timebands.scss0
-rw-r--r--app/assets/stylesheets/main/users.scss (renamed from app/assets/stylesheets/main/users.css.scss)0
-rw-r--r--app/assets/stylesheets/main/vehicle_journey_frequencies.scss158
-rw-r--r--app/assets/stylesheets/main/vehicle_journey_imports.scss (renamed from app/assets/stylesheets/main/vehicle_journey_imports.css.scss)0
-rw-r--r--app/assets/stylesheets/main/vehicle_journeys.scss (renamed from app/assets/stylesheets/main/vehicle_journeys.css.scss)57
-rw-r--r--app/assets/stylesheets/main/vehicle_translation.scss (renamed from app/assets/stylesheets/main/vehicle_translation.css.scss)0
-rw-r--r--app/assets/stylesheets/main/welcome.scss (renamed from app/assets/stylesheets/main/welcome.css.scss)0
-rw-r--r--app/assets/stylesheets/modules/devise.scss (renamed from app/assets/stylesheets/modules/devise.css.scss)0
-rw-r--r--app/assets/stylesheets/modules/icons.scss (renamed from app/assets/stylesheets/modules/icons.css.scss)5
-rw-r--r--app/assets/stylesheets/modules/index_item.scss (renamed from app/assets/stylesheets/modules/index_item.css.scss)0
-rw-r--r--app/assets/stylesheets/modules/job_status_colors.scss (renamed from app/assets/stylesheets/modules/job_status_colors.css.scss)2
-rw-r--r--app/assets/stylesheets/modules/job_status_title.scss (renamed from app/assets/stylesheets/modules/job_status_title.css.scss)0
-rw-r--r--app/assets/stylesheets/modules/links.scss (renamed from app/assets/stylesheets/modules/links.css.scss)0
-rw-r--r--app/assets/stylesheets/modules/progress_bars.scss (renamed from app/assets/stylesheets/modules/progress_bars.css.scss)0
-rw-r--r--app/assets/stylesheets/modules/search.scss (renamed from app/assets/stylesheets/modules/search.css.scss)0
-rw-r--r--app/assets/stylesheets/partials/base.scss23
-rw-r--r--app/assets/stylesheets/partials/footer.scss (renamed from app/assets/stylesheets/partials/footer.css.scss)0
-rw-r--r--app/assets/stylesheets/partials/header.scss (renamed from app/assets/stylesheets/partials/header.css.scss)0
-rw-r--r--app/assets/stylesheets/partials/ie_report.scss (renamed from app/assets/stylesheets/partials/ie_report.css.scss)0
-rw-r--r--app/assets/stylesheets/vendor/bootstrap_changes.scss (renamed from app/assets/stylesheets/vendor/bootstrap_changes.css.scss)24
-rw-r--r--app/assets/stylesheets/vendor/formtastic_changes.scss (renamed from app/assets/stylesheets/vendor/formtastic_changes.css.scss)0
-rw-r--r--app/assets/stylesheets/vendor/map_layers.css.scss10
-rw-r--r--app/assets/stylesheets/vendor/map_layers.scss39
-rw-r--r--app/assets/stylesheets/vendor/openlayers_style.scss (renamed from app/assets/stylesheets/vendor/openlayers_style.css)5
-rw-r--r--app/assets/stylesheets/vendor/pagination.scss (renamed from app/assets/stylesheets/vendor/pagination.css.scss)0
-rw-r--r--app/assets/stylesheets/vendor/simple_form.scss (renamed from app/assets/stylesheets/vendor/simple_form.css.scss)0
-rw-r--r--app/assets/stylesheets/vendor/typeahead.scss (renamed from app/assets/stylesheets/vendor/typeahead.css.scss)0
-rw-r--r--app/controllers/access_links_controller.rb11
-rw-r--r--app/controllers/api/v1/chouette_controller.rb4
-rw-r--r--app/controllers/application_controller.rb4
-rw-r--r--app/controllers/autocomplete_stop_areas_controller.rb4
-rw-r--r--app/controllers/autocomplete_time_tables_controller.rb4
-rw-r--r--app/controllers/autocomplete_timebands_controller.rb31
-rw-r--r--app/controllers/breadcrumb_controller.rb16
-rw-r--r--app/controllers/chouette_controller.rb2
-rw-r--r--app/controllers/compliance_check_tasks_controller.rb4
-rw-r--r--app/controllers/compliance_checks_controller.rb11
-rw-r--r--app/controllers/export_tasks_controller.rb4
-rw-r--r--app/controllers/exports_controller.rb13
-rw-r--r--app/controllers/help_controller.rb2
-rw-r--r--app/controllers/imports_controller.rb17
-rw-r--r--app/controllers/journey_patterns_controller.rb3
-rw-r--r--app/controllers/lines_controller.rb6
-rw-r--r--app/controllers/networks_controller.rb2
-rw-r--r--app/controllers/referentials_controller.rb2
-rw-r--r--app/controllers/route_sections_controller.rb75
-rw-r--r--app/controllers/route_sections_selectors_controller.rb47
-rw-r--r--app/controllers/routes_controller.rb2
-rw-r--r--app/controllers/stop_areas_controller.rb2
-rw-r--r--app/controllers/timebands_controller.rb20
-rw-r--r--app/controllers/users/registrations_controller.rb6
-rw-r--r--app/controllers/vehicle_journey_frequencies_controller.rb26
-rw-r--r--app/controllers/vehicle_journeys_controller.rb23
-rw-r--r--app/helpers/application_helper.rb8
-rw-r--r--app/helpers/breadcrumb_helper.rb27
-rw-r--r--app/helpers/compliance_checks_helper.rb25
-rw-r--r--app/helpers/job_status_icon_helper.rb15
-rw-r--r--app/helpers/route_section_selectors_helper.rb23
-rw-r--r--app/helpers/timebands_helper.rb2
-rw-r--r--app/helpers/vehicle_journey_frequencies_helper.rb14
-rw-r--r--app/helpers/vehicle_journeys_helper.rb33
-rw-r--r--app/inputs/search_timeband_input.rb44
-rw-r--r--app/maps/access_point_map.rb2
-rw-r--r--app/maps/application_map.rb8
-rw-r--r--app/maps/design/journey_pattern_style_map.rb53
-rw-r--r--app/maps/design/route_section_selector_style_map.rb73
-rw-r--r--app/maps/design/route_section_style_map.rb66
-rw-r--r--app/maps/journey_pattern_map.rb12
-rw-r--r--app/maps/route_map.rb2
-rw-r--r--app/maps/route_section_map.rb66
-rw-r--r--app/maps/route_section_selector_map.rb116
-rw-r--r--app/maps/stop_area_map.rb3
-rw-r--r--app/models/compliance_check_export.rb6
-rw-r--r--app/models/export_task.rb35
-rw-r--r--app/models/gtfs_export.rb12
-rw-r--r--app/models/neptune_export.rb1
-rw-r--r--app/models/referential.rb16
-rw-r--r--app/models/route_section_search.rb34
-rw-r--r--app/models/route_sections_selector.rb101
-rw-r--r--app/models/rule_parameter_set.rb32
-rw-r--r--app/models/stop_area_copy.rb17
-rw-r--r--app/models/vehicle_filter.rb5
-rw-r--r--app/views/access_links/_form.html.erb8
-rw-r--r--app/views/access_links/show.html.erb26
-rw-r--r--app/views/access_points/_form.html.erb83
-rw-r--r--app/views/api_keys/_form.html.erb2
-rw-r--r--app/views/api_keys/show.html.erb24
-rw-r--r--app/views/autocomplete_timebands/index.rabl8
-rw-r--r--app/views/compliance_checks/_compliance_check_results.erb88
-rw-r--r--app/views/compliance_checks/report.html.erb2
-rw-r--r--app/views/compliance_checks/show.html.erb2
-rw-r--r--app/views/connection_links/_form.erb8
-rw-r--r--app/views/connection_links/show.html.erb20
-rw-r--r--app/views/devise/confirmations/new.html.erb36
-rw-r--r--app/views/devise/registrations/edit.html.erb5
-rw-r--r--app/views/devise/sessions/new.html.erb14
-rw-r--r--app/views/devise/shared/_intro.html.erb9
-rw-r--r--app/views/export_tasks/_fields_gtfs_export.html.erb2
-rw-r--r--app/views/export_tasks/new.html.erb24
-rw-r--r--app/views/exports/show.html.erb2
-rw-r--r--app/views/group_of_lines/_form.erb2
-rw-r--r--app/views/help/GTFS_stops_import.textile104
-rw-r--r--app/views/help/browser.textile7
-rw-r--r--app/views/help/connection.textile12
-rw-r--r--app/views/help/dataspaces.textile13
-rw-r--r--app/views/help/export_format.textile20
-rw-r--r--app/views/help/exports.textile61
-rw-r--r--app/views/help/group_of_lines.textile2
-rw-r--r--app/views/help/hubexport.textile131
-rw-r--r--app/views/help/import_formats.textile19
-rw-r--r--app/views/help/imports.textile75
-rw-r--r--app/views/help/index.textile27
-rw-r--r--app/views/help/introduction.textile9
-rw-r--r--app/views/help/journey_patterns.textile4
-rw-r--r--app/views/help/lines.textile10
-rw-r--r--app/views/help/metadata.textile5
-rw-r--r--app/views/help/navigation.textile42
-rw-r--r--app/views/help/parametersets.textile36
-rw-r--r--app/views/help/relationship.textile12
-rw-r--r--app/views/help/route_sections.textile92
-rw-r--r--app/views/help/routes.textile24
-rw-r--r--app/views/help/startingfromscratch.textile27
-rw-r--r--app/views/help/stop_areas.textile21
-rw-r--r--app/views/help/stopsmanagement.textile6
-rw-r--r--app/views/help/temporaryline.textile8
-rw-r--r--app/views/help/terms.textile14
-rw-r--r--app/views/help/time_tables.textile2
-rw-r--r--app/views/help/timebands.textile0
-rw-r--r--app/views/help/toc.textile11
-rw-r--r--app/views/help/validations.textile14
-rw-r--r--app/views/help/vehicle_journeys.textile29
-rw-r--r--app/views/help/vehicle_journeys_cleaning.textile33
-rw-r--r--app/views/help/vehicle_journeys_import_export.textile22
-rw-r--r--app/views/import_tasks/new.html.erb50
-rw-r--r--app/views/imports/show.html.erb2
-rw-r--r--app/views/journey_patterns/_journey_pattern.html.erb13
-rw-r--r--app/views/journey_patterns/show.html.erb9
-rw-r--r--app/views/lines/_form.erb1
-rw-r--r--app/views/lines/_line.erb42
-rw-r--r--app/views/lines/show.html.erb9
-rw-r--r--app/views/networks/_form.erb1
-rw-r--r--app/views/networks/show.html.erb6
-rw-r--r--app/views/referentials/_counts.html.erb4
-rw-r--r--app/views/route_sections/_form.html.erb24
-rw-r--r--app/views/route_sections/edit.html.erb4
-rw-r--r--app/views/route_sections/index.html.erb58
-rw-r--r--app/views/route_sections/new.html.erb3
-rw-r--r--app/views/route_sections/show.html.erb28
-rw-r--r--app/views/route_sections/show.kml.erb8
-rw-r--r--app/views/route_sections_selectors/_selection.js.erb28
-rw-r--r--app/views/route_sections_selectors/edit.html.erb48
-rw-r--r--app/views/routes/_route.html.erb47
-rw-r--r--app/views/shared/_form_messages.html.erb7
-rw-r--r--app/views/shared/_header.erb8
-rw-r--r--app/views/shared/_ie_report.html.erb4
-rw-r--r--app/views/shared/_ie_report_file.html.erb2
-rw-r--r--app/views/shared/_ie_report_line.html.erb14
-rw-r--r--app/views/stop_areas/_form.html.erb43
-rw-r--r--app/views/stop_areas/show.html.erb21
-rw-r--r--app/views/timebands/_form.html.erb12
-rw-r--r--app/views/timebands/_sidebar.html.erb11
-rw-r--r--app/views/timebands/edit.html.erb3
-rw-r--r--app/views/timebands/index.html.erb29
-rw-r--r--app/views/timebands/new.html.erb3
-rw-r--r--app/views/timebands/show.html.erb12
-rw-r--r--app/views/users/_form.html.erb6
-rw-r--r--app/views/vehicle_journey_frequencies/_form_footer.html.erb14
-rw-r--r--app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb60
-rw-r--r--app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb22
-rw-r--r--app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb28
-rw-r--r--app/views/vehicle_journey_frequencies/_show_sidebar.html.erb23
-rw-r--r--app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb29
-rw-r--r--app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb52
-rw-r--r--app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb22
-rw-r--r--app/views/vehicle_journey_frequencies/edit.html.erb7
-rw-r--r--app/views/vehicle_journey_frequencies/edit.js.erb10
-rw-r--r--app/views/vehicle_journey_frequencies/new.html.erb6
-rw-r--r--app/views/vehicle_journey_frequencies/new.js.erb13
-rw-r--r--app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb5
-rw-r--r--app/views/vehicle_journey_frequencies/show.html.erb3
-rw-r--r--app/views/vehicle_journeys/_form.html.erb60
-rw-r--r--app/views/vehicle_journeys/_form_footer.html.erb5
-rw-r--r--app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb49
-rw-r--r--app/views/vehicle_journeys/_route_popover.html.erb3
-rw-r--r--app/views/vehicle_journeys/_show_details.html.erb87
-rw-r--r--app/views/vehicle_journeys/_show_sidebar.html.erb15
-rw-r--r--app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb20
-rw-r--r--app/views/vehicle_journeys/_sidebar.html.erb11
-rw-r--r--app/views/vehicle_journeys/_vehicle_journeys.html.erb41
-rw-r--r--app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb40
-rw-r--r--app/views/vehicle_journeys/edit.html.erb3
-rw-r--r--app/views/vehicle_journeys/index.html.erb43
-rw-r--r--app/views/vehicle_journeys/new.html.erb2
-rw-r--r--app/views/vehicle_journeys/new.js.erb11
-rw-r--r--app/views/vehicle_journeys/show.html.erb121
-rw-r--r--config/database.yml6
-rw-r--r--config/database.yml.travis6
-rw-r--r--config/deploy/private.rb2
-rw-r--r--config/deploy/production.rb4
-rw-r--r--config/deploy/staging.rb4
-rw-r--r--config/deploy/unstable.rb2
-rw-r--r--config/environment.rb2
-rw-r--r--config/environments/production.rb6
-rw-r--r--config/initializers/apartment.rb2
-rw-r--r--config/initializers/rgeo.rb1
-rw-r--r--config/initializers/route_section.rb3
-rw-r--r--config/locales/access_links.en.yml45
-rw-r--r--config/locales/access_links.fr.yml45
-rw-r--r--config/locales/access_links.yml93
-rw-r--r--config/locales/access_points.en.yml63
-rw-r--r--config/locales/access_points.fr.yml63
-rw-r--r--config/locales/access_points.yml129
-rw-r--r--config/locales/access_types.en.yml6
-rw-r--r--config/locales/access_types.fr.yml6
-rw-r--r--config/locales/access_types.yml13
-rw-r--r--config/locales/actions.en.yml12
-rw-r--r--config/locales/actions.fr.yml (renamed from config/locales/actions.yml)11
-rw-r--r--config/locales/api_keys.en.yml20
-rw-r--r--config/locales/api_keys.fr.yml20
-rw-r--r--config/locales/api_keys.yml37
-rw-r--r--config/locales/area_types.en.yml (renamed from config/locales/area_types.yml)9
-rw-r--r--config/locales/area_types.fr.yml8
-rw-r--r--config/locales/breadcrumbs.en.yml6
-rw-r--r--config/locales/breadcrumbs.fr.yml (renamed from config/locales/breadcrumbs.yml)6
-rw-r--r--config/locales/clean_ups.en.yml27
-rw-r--r--config/locales/clean_ups.fr.yml (renamed from config/locales/clean_ups.yml)27
-rw-r--r--config/locales/companies.en.yml65
-rw-r--r--config/locales/companies.fr.yml65
-rw-r--r--config/locales/companies.yml133
-rw-r--r--config/locales/compliance_check_results.en.yml455
-rw-r--r--config/locales/compliance_check_results.fr.yml (renamed from config/locales/compliance_check_results.yml)457
-rw-r--r--config/locales/compliance_checks.en.yml68
-rw-r--r--config/locales/compliance_checks.fr.yml (renamed from config/locales/compliance_checks.yml)71
-rw-r--r--config/locales/connection_link_types.en.yml7
-rw-r--r--config/locales/connection_link_types.fr.yml7
-rw-r--r--config/locales/connection_link_types.yml15
-rw-r--r--config/locales/connection_links.en.yml80
-rw-r--r--config/locales/connection_links.fr.yml (renamed from config/locales/connection_links.yml)88
-rw-r--r--config/locales/devise.en.yml2
-rw-r--r--config/locales/devise.fr.yml4
-rw-r--r--config/locales/directions.en.yml (renamed from config/locales/directions.yml)16
-rw-r--r--config/locales/directions.fr.yml15
-rw-r--r--config/locales/en.yml1
-rw-r--r--config/locales/enumerize.en.yml2
-rw-r--r--config/locales/enumerize.fr.yml4
-rw-r--r--config/locales/exports.fr.yml2
-rw-r--r--config/locales/formtastic.en.yml15
-rw-r--r--config/locales/formtastic.fr.yml15
-rw-r--r--config/locales/formtastic.yml31
-rw-r--r--config/locales/fr.yml1
-rw-r--r--config/locales/group_of_lines.en.yml61
-rw-r--r--config/locales/group_of_lines.fr.yml61
-rw-r--r--config/locales/group_of_lines.yml124
-rw-r--r--config/locales/ie_report.en.yml9
-rw-r--r--config/locales/ie_report.fr.yml17
-rw-r--r--config/locales/iev.en.yml25
-rw-r--r--config/locales/import_tasks.en.yml4
-rw-r--r--config/locales/import_tasks.fr.yml2
-rw-r--r--config/locales/imports.en.yml2
-rw-r--r--config/locales/imports.fr.yml2
-rw-r--r--config/locales/job_status.en.yml4
-rw-r--r--config/locales/job_status.fr.yml4
-rw-r--r--config/locales/journey_frequencies.en.yml13
-rw-r--r--config/locales/journey_frequencies.fr.yml13
-rw-r--r--config/locales/journey_patterns.en.yml67
-rw-r--r--config/locales/journey_patterns.fr.yml67
-rw-r--r--config/locales/journey_patterns.yml44
-rw-r--r--config/locales/layouts.en.yml41
-rw-r--r--config/locales/layouts.fr.yml (renamed from config/locales/layouts.yml)41
-rw-r--r--config/locales/lines.yml233
-rw-r--r--config/locales/lines_en.yml118
-rw-r--r--config/locales/lines_fr.yml117
-rw-r--r--config/locales/maps.en.yml9
-rw-r--r--config/locales/maps.fr.yml9
-rw-r--r--config/locales/maps.yml20
-rw-r--r--config/locales/networks.en.yml62
-rw-r--r--config/locales/networks.fr.yml62
-rw-r--r--config/locales/networks.yml126
-rw-r--r--config/locales/organisations.en.yml18
-rw-r--r--config/locales/organisations.fr.yml (renamed from config/locales/organisations.yml)19
-rw-r--r--config/locales/referentials.en.yml78
-rw-r--r--config/locales/referentials.fr.yml (renamed from config/locales/referentials.yml)84
-rw-r--r--config/locales/route_sections.en.yml48
-rw-r--r--config/locales/route_sections.fr.yml48
-rw-r--r--config/locales/routes.en.yml82
-rw-r--r--config/locales/routes.fr.yml (renamed from config/locales/routes.yml)101
-rw-r--r--config/locales/rule_parameter_sets.en.yml78
-rw-r--r--config/locales/rule_parameter_sets.fr.yml (renamed from config/locales/rule_parameter_sets.yml)80
-rw-r--r--config/locales/source_types.en.yml13
-rw-r--r--config/locales/source_types.fr.yml13
-rw-r--r--config/locales/stop_area_copies.en.yml14
-rw-r--r--config/locales/stop_area_copies.fr.yml14
-rw-r--r--config/locales/stop_area_copies.yml29
-rw-r--r--config/locales/stop_areas.en.yml167
-rw-r--r--config/locales/stop_areas.fr.yml168
-rw-r--r--config/locales/stop_areas.yml337
-rw-r--r--config/locales/stop_points.en.yml40
-rw-r--r--config/locales/stop_points.fr.yml (renamed from config/locales/stop_points.yml)48
-rw-r--r--config/locales/subscriptions.en.yml17
-rw-r--r--config/locales/subscriptions.fr.yml (renamed from config/locales/subscriptions.yml)19
-rw-r--r--config/locales/time_table_combinations.en.yml15
-rw-r--r--config/locales/time_table_combinations.fr.yml (renamed from config/locales/time_table_combinations.yml)16
-rw-r--r--config/locales/time_tables.en.yml107
-rw-r--r--config/locales/time_tables.fr.yml111
-rw-r--r--config/locales/time_tables.yml222
-rw-r--r--config/locales/timebands.en.yml26
-rw-r--r--config/locales/timebands.fr.yml26
-rw-r--r--config/locales/transport_modes.en.yml (renamed from config/locales/transport_modes.yml)25
-rw-r--r--config/locales/transport_modes.fr.yml24
-rw-r--r--config/locales/users.en.yml21
-rw-r--r--config/locales/users.fr.yml21
-rw-r--r--config/locales/users.yml43
-rw-r--r--config/locales/validation_reports.en.yml344
-rw-r--r--config/locales/validation_reports.fr.yml (renamed from config/locales/validation_reports.yml)345
-rw-r--r--config/locales/validation_tasks.en.yml97
-rw-r--r--config/locales/validation_tasks.fr.yml (renamed from config/locales/validation_tasks.yml)97
-rw-r--r--config/locales/validations.en.yml100
-rw-r--r--config/locales/validations.fr.yml (renamed from config/locales/validations.yml)100
-rw-r--r--config/locales/vehicle_journey_frequencies.en.yml9
-rw-r--r--config/locales/vehicle_journey_frequencies.fr.yml9
-rw-r--r--config/locales/vehicle_journey_imports.en.yml24
-rw-r--r--config/locales/vehicle_journey_imports.fr.yml24
-rw-r--r--config/locales/vehicle_journey_imports.yml48
-rw-r--r--config/locales/vehicle_journeys.en.yml127
-rw-r--r--config/locales/vehicle_journeys.fr.yml127
-rw-r--r--config/locales/vehicle_journeys.yml228
-rw-r--r--config/locales/vehicle_translations.en.yml21
-rw-r--r--config/locales/vehicle_translations.fr.yml (renamed from config/locales/vehicle_translations.yml)22
-rw-r--r--config/locales/waybacks.en.yml (renamed from config/locales/waybacks.yml)6
-rw-r--r--config/locales/waybacks.fr.yml5
-rw-r--r--config/locales/will_paginate.en.yml20
-rw-r--r--config/locales/will_paginate.fr.yml (renamed from config/locales/will_paginate.yml)21
-rw-r--r--config/newrelic.yml15
-rw-r--r--config/routes.rb14
-rw-r--r--config/secrets.yml2
-rw-r--r--db/migrate/20150529134410_create_route_sections.ninoxe_engine.rb18
-rw-r--r--db/migrate/20150703141935_remove_uniqueness_for_registration_number.ninoxe_engine.rb23
-rw-r--r--db/migrate/20150922095511_add_stable_id_to_line.ninoxe_engine.rb8
-rw-r--r--db/migrate/20150922103725_add_distance_to_route_sections.ninoxe_engine.rb8
-rw-r--r--db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb14
-rw-r--r--db/migrate/20151022150419_add_journey_category_to_vehicle_journey.ninoxe_engine.rb6
-rw-r--r--db/migrate/20151023101306_create_timebands.ninoxe_engine.rb16
-rw-r--r--db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb6
-rw-r--r--db/migrate/20151111210749_add_no_processing_to_route_sections.ninoxe_engine.rb8
-rw-r--r--db/migrate/20151124144252_remove_waiting_time_elapse_duration_headway_frequency_to_vehicle_journey_at_stops.ninoxe_engine.rb14
-rw-r--r--db/migrate/20151124145000_remove_time_slot_id_from_vehicle_journey.ninoxe_engine.rb11
-rw-r--r--db/migrate/20151124145300_drop_time_slots.ninoxe_engine.rb6
-rw-r--r--db/migrate/20151203132113_create_journey_pattern_sections.ninoxe_engine.rb16
-rw-r--r--db/migrate/20151204102348_add_section_status_to_journey_pattern.ninoxe_engine.rb6
-rw-r--r--db/migrate/20151215175635_add_limit_and_foreign_key_to_journey_frequencies.ninoxe_engine.rb16
-rw-r--r--db/schema.rb170
-rw-r--r--lib/ievkit/error.rb8
-rw-r--r--lib/ninoxe_extension/hub/company_restrictions.rb13
-rw-r--r--lib/ninoxe_extension/hub/connection_link_restrictions.rb4
-rw-r--r--lib/ninoxe_extension/hub/group_of_line_restrictions.rb13
-rw-r--r--lib/ninoxe_extension/hub/journey_pattern_restrictions.rb5
-rw-r--r--lib/ninoxe_extension/hub/line_restrictions.rb13
-rw-r--r--lib/ninoxe_extension/hub/network_restrictions.rb15
-rw-r--r--lib/ninoxe_extension/hub/objectid_restrictions.rb8
-rw-r--r--lib/ninoxe_extension/hub/route_restrictions.rb4
-rw-r--r--lib/ninoxe_extension/hub/stop_area_restrictions.rb41
-rw-r--r--lib/ninoxe_extension/hub/time_table_restrictions.rb7
-rw-r--r--lib/ninoxe_extension/hub/vehicle_journey_restrictions.rb4
-rw-r--r--lib/osrm_route_section_processor.rb40
-rw-r--r--lib/tasks/demo.rake25
-rw-r--r--lib/tasks/route_sections.rake17
-rw-r--r--public/help/2015-07-23_152040.pngbin0 -> 11063 bytes
-rw-r--r--public/help/2015-07-23_152615.pngbin0 -> 15915 bytes
-rw-r--r--public/help/2015-07-23_162747.pngbin0 -> 10015 bytes
-rw-r--r--public/help/2015-07-23_162942.pngbin0 -> 7224 bytes
-rw-r--r--public/help/2015-07-23_165033.pngbin0 -> 19927 bytes
-rw-r--r--public/help/2015-07-23_165157.pngbin0 -> 5519 bytes
-rw-r--r--public/help/2015-07-23_165644.pngbin0 -> 15500 bytes
-rw-r--r--public/help/2015-09-16_152512.pngbin0 -> 12745 bytes
-rw-r--r--public/help/2015-09-16_153205.pngbin0 -> 42342 bytes
-rw-r--r--public/help/2015-09-16_153317.pngbin0 -> 33970 bytes
-rw-r--r--public/help/2015-09-16_153752.pngbin0 -> 48963 bytes
-rw-r--r--public/help/2015-09-16_175925.pngbin0 -> 18654 bytes
-rw-r--r--public/help/2015-09-16_180707.pngbin0 -> 7519 bytes
-rw-r--r--public/help/2015-09-16_181027.pngbin0 -> 18930 bytes
-rw-r--r--public/help/2015-12-17_172522.pngbin0 -> 152903 bytes
-rw-r--r--public/help/2015-12-17_173615.pngbin0 -> 414375 bytes
-rw-r--r--public/help/2016-01-08_163438.pngbin0 -> 157781 bytes
-rw-r--r--public/help/2016-01-08_163715.pngbin0 -> 103380 bytes
-rw-r--r--public/help/2016-01-08_165558.pngbin0 -> 100472 bytes
-rw-r--r--public/help/2016-01-08_170524.pngbin0 -> 28663 bytes
-rw-r--r--public/help/2016-01-08_175148.pngbin0 -> 287003 bytes
-rw-r--r--public/help/2016-01-08_175340.pngbin0 -> 236705 bytes
-rw-r--r--public/help/2016-01-08_180432.pngbin0 -> 10278 bytes
-rw-r--r--public/help/2016-01-08_180930.pngbin0 -> 32289 bytes
-rw-r--r--public/help/import_file_result.pngbin8529 -> 20780 bytes
-rw-r--r--public/help/import_line_detail.pngbin35397 -> 5634 bytes
-rw-r--r--public/help/import_line_result.pngbin8607 -> 22948 bytes
-rw-r--r--public/help/import_result.pngbin24432 -> 22902 bytes
-rw-r--r--spec/controllers/routes_controller_spec.rb10
-rw-r--r--spec/controllers/vehicle_journey_frequencies_controller_spec.rb5
-rw-r--r--spec/features/timebands_spec.rb62
-rw-r--r--spec/helpers/vehicle_journey_frequencies_helper_spec.rb15
-rw-r--r--spec/models/export_task_spec.rb8
-rw-r--r--spec/models/gtfs_export_spec.rb39
-rw-r--r--spec/models/route_sections_selector_spec.rb43
-rw-r--r--spec/support/fake_iev_server.rb15
-rw-r--r--spec/support/referential.rb8
-rw-r--r--spec/views/timebands/edit.html.erb_spec.rb24
-rw-r--r--spec/views/timebands/index.html.erb_spec.rb20
-rw-r--r--spec/views/timebands/new.html.erb_spec.rb18
-rw-r--r--spec/views/timebands/show.html.erb_spec.rb24
-rw-r--r--spec/views/vehicle_journeys/_form.html.erb_spec.rb42
-rw-r--r--spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb6
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.pngbin180 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.pngbin120 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_glass_65_ffffff_1x400.pngbin105 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_glass_75_dadada_1x400.pngbin111 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.pngbin110 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_glass_75_ffffff_1x400.pngbin107 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin101 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-bg_inset-soft_95_fef1ec_1x100.pngbin123 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-icons_222222_256x240.pngbin4369 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-icons_2e83ff_256x240.pngbin4369 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-icons_454545_256x240.pngbin4369 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-icons_888888_256x240.pngbin4369 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/images/ui-icons_cd0a0a_256x240.pngbin4369 -> 0 bytes
-rw-r--r--vendor/assets/stylesheets/jquery-ui.css565
495 files changed, 8588 insertions, 5340 deletions
diff --git a/.gitignore b/.gitignore
index cc3e0cd16..31b5d928c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,4 +23,8 @@ public/assets/
chouette2.war
vendor/bundle
.ruby-version
+start.sh
coverage
+
+# IDE
+.idea
diff --git a/.travis.yml b/.travis.yml
index 2e23625f7..42d634823 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,39 +1,54 @@
+sudo: false
language: ruby
addons:
postgresql: "9.3"
+ apt:
+ packages:
+ - build-essential
+ - ruby-dev
+ - libproj-dev
+ - libgeos-dev
+ - libffi-dev
+ - libsparsehash-dev
+ - zlib1g-dev
+ - libxslt1-dev
+ - libxml2-dev
+ - libbz2-dev
rvm:
- 1.9.3
- - 2.1.5
- - 2.1.6
- - 2.2.2
- - jruby-1.7.19
+ - 2.1.7
+ - 2.2.3
+ - jruby-19mode
+ - jruby-head
jdk:
- oraclejdk7
- openjdk7
matrix:
exclude:
- - rvm: 1.9.3
+ - rvm: 1.9.3
jdk: openjdk7
- - rvm: 2.1.5
+ - rvm: 2.1.7
jdk: openjdk7
- - rvm: 2.1.6
+ - rvm: 2.2.3
jdk: openjdk7
- - rvm: 2.2.2
+ allow_failures:
+ - rvm: jruby-head
+ jdk: oraclejdk7
+ - rvm: jruby-head
jdk: openjdk7
notifications:
email:
- mflorisson@cityway.fr
- - ldonnet@cityway.fr
+ - bruno@atnos.com
- metienne@cityway.fr
- zbouziane@cityway.fr
- alban.peignier@af83.com
- anicet.rohee@af83.com
before_install:
- - sudo apt-get update
- - sudo apt-get install build-essential ruby-dev libproj-dev libgeos-dev libffi-dev libsparsehash-dev zlib1g-dev libxslt1-dev libxml2-dev libbz2-dev
- gem update bundler
before_script:
- - "bundle exec rake ci:db_travis_config"
- - "bundle exec rake db:create"
- - "bundle exec rake db:migrate"
-script: "bundle exec rake spec"
+ - export JRUBY_OPTS="-J-XX:MaxPermSize=128m"
+ - bundle exec rake ci:db_travis_config
+ - bundle exec rake db:create
+ - bundle exec rake db:migrate
+script: bundle exec rake spec
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 858418628..250c2e823 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,24 @@
-# Version 3.0.0 (en cours)
+# Version 3.1.0 (en cours)
+* Nouvelles fonctionnalités
+ * Validation GTFS lors de l'import
+* Améliorations
+ * présentation des rapports d'import/export et validation
+ * mise en adéquation de Chouette sur Neptune (hors courses à fréquences)
+
+# Version 3.0.1
+* Corrections
+ * mise en place d'un formulaire de consultation des clés de l'API V1 (Mantis 38248)
+ * restitution d'erreurs de clonage des arrêts sur clone invalide (Mantis 39159)
+ * corrections sur les restrictions hub
+
+# Version 3.0.0 (20/08/15)
* Nouvelles fonctionnalités
* Mise à jour des briques logicielles utilisées ( Rails 4 et plugins associées ) et version du langage Ruby ( 1.9.3 -> 2.1.6 en restant compatible 1.9.3 )
* Prise en compte d'une barre de progression lorsqu'un import, un export ou une validation est lancé
* Mise en valeur du format des données importées ou exportées
* Affichage d'une synthèse de la validation effectuée par lignes de transport
* Envoi de mail en asynchrone avec DelayedJob en option
+ * Suppression de l'import CSV : l'import CSV peut être fait uniquement désormais au niveau des horaires des séquences d'arrêts
# Version 2.5.3
* Nouvelles fonctionnalités
diff --git a/Gemfile b/Gemfile
index ae9412a77..7785c559e 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,18 +1,17 @@
source 'http://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
-gem 'rails', '4.1.10'
+gem 'rails', '~> 4.1.10'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
-gem 'uglifier', '>= 1.3.0'
+gem 'uglifier', '~> 2.7.2'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# Use jquery as the JavaScript library
-gem 'jquery-rails'
-gem 'jquery-ui-sass-rails'
+gem 'jquery-rails', '~> 3.1.4' # Update to v4 for Rails 4.2
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
@@ -36,13 +35,13 @@ gem 'spring', group: :development
# gem 'debugger', group: [:development, :test]
# API Rest
-gem 'sawyer', "~> 0.6.0"
+gem 'sawyer', '~> 0.6.0'
gem 'faraday_middleware', '~> 0.9.1'
platforms :jruby do
gem 'activerecord-jdbcpostgresql-adapter', '~> 1.3.3'
gem 'jruby-openssl'
- gem "jruby-rack-worker"
+ gem 'jruby-rack-worker'
gem 'warbler'
gem 'therubyrhino'
end
@@ -53,51 +52,32 @@ platforms :ruby do
gem 'sqlite3'
end
-# I18n
-gem 'rails-i18n', '~> 4.0.0'
+gem 'activerecord-postgis-adapter'
+gem 'polylines'
# Authentication
gem 'devise', '~> 3.4.0'
-gem 'devise-i18n'
gem 'devise-encryptable'
gem 'devise_invitable'
# Map, Geolocalization
-gem "map_layers", "0.0.4"
-gem "georuby-ext", "0.0.5"
-gem "georuby", "2.3.0" # Fix version for georuby-ext because api has changed
+gem 'map_layers', '0.0.4'
+gem 'rgeo', '~> 0.5.2'
+gem 'georuby-ext', '0.0.5'
+gem 'georuby', '2.3.0' # Fix version for georuby-ext because api has changed
gem 'mimemagic'
# User interface
gem 'language_engine', '0.0.6'
-gem 'calendar_helper', "0.2.5"
+gem 'calendar_helper', '0.2.5'
gem 'cocoon'
-gem 'formtastic', "2.3.1"
+gem 'formtastic', '2.3.1'
gem 'RedCloth'
gem 'simple_form', '~> 3.1.0'
gem 'font-awesome-sass', '~> 4.2.0'
gem 'will_paginate-bootstrap', '~> 1.0.1'
-gem "breadcrumbs_on_rails"
-
-# TODO : Move these resources to rails assets
-gem "modernizr-rails", "~> 2.0.6"
-
-# Javascript
-source 'https://rails-assets.org' do
- gem 'rails-assets-morrisjs', '~> 0.5.1'
- gem 'rails-assets-raphael', '~> 2.1.3'
- gem 'rails-assets-footable', '~> 2.0.3'
-
- # Use twitter bootstrap resources
- gem 'rails-assets-bootstrap-sass-official', '~> 3.3.0'
- gem 'rails-assets-tagmanager', '~> 3.0.1.0'
- gem 'rails-assets-typeahead.js', '~> 0.10.5'
- gem 'rails-assets-typeahead.js-bootstrap3.less'
- gem 'rails-assets-respond'
- gem 'rails-assets-eonasdan-bootstrap-datetimepicker', '~> 3.1.3'
- gem 'rails-assets-jquery-tokeninput', '~> 1.7.0'
-end
+gem 'breadcrumbs_on_rails'
# Format Output
gem 'json'
@@ -115,32 +95,32 @@ gem 'squeel'
gem 'enumerize', '~> 0.10.0'
-#gem 'ninoxe', :git => 'https://github.com/afimb/ninoxe.git', :branch => "rails4"
-#gem 'ninoxe', :git => 'https://github.com/afimb/ninoxe.git'
-#gem 'ninoxe',:path => '~/Projets/cityway/ninoxe'
-gem 'ninoxe', '1.2.0'
+#gem 'ninoxe', '1.2.4'
+gem 'ninoxe', git: 'https://github.com/afimb/ninoxe.git'
+#gem 'ninoxe', path: '../ninoxe'
gem 'acts_as_list', '~> 0.6.0'
-gem "acts_as_tree", '~> 2.1.0', :require => "acts_as_tree"
+gem 'acts_as_tree', '~> 2.1.0', require: 'acts_as_tree'
gem 'rabl'
gem 'delayed_job_active_record'
gem 'devise-async'
-gem 'apartment', "~> 1.0.0"
+gem 'apartment', '~> 1.0.0'
gem 'newrelic_rpm'
+gem 'letter_opener'
group :development do
- gem 'capistrano', '2.13.5'
+ gem 'capistrano', '2.13.5'
gem 'capistrano-ext'
gem 'guard'
gem 'guard-rspec'
gem 'rails-erd'
- gem 'meta_request'
- gem 'letter_opener'
- gem 'quiet_assets', '~> 1.0'
- gem 'simplecov', '~> 0.10.0'
+ # MetaRequest is incompatible with rgeo-activerecord
+ # gem 'meta_request'
+ gem 'quiet_assets', '~> 1.0'
+ gem 'simplecov', '~> 0.10.0'
platforms :ruby_20, :ruby_21, :ruby_22 do
gem 'better_errors'
gem 'binding_of_caller'
@@ -149,20 +129,43 @@ end
group :test, :development do
gem 'pry-rails'
- gem "rspec-rails", "~> 3.1.0"
- gem "fakeweb"
- gem 'capybara', "~> 2.4.0"
+ gem 'rspec-rails', '~> 3.1.0'
+ gem 'fakeweb'
+ gem 'capybara', '~> 2.4.0'
gem 'poltergeist'
gem 'launchy'
gem 'factory_girl_rails', '~> 4.0'
- # gem 'i18n-tasks'
- gem 'rb-inotify', :require => RUBY_PLATFORM.include?('linux') && 'rb-inotify'
- gem 'rb-fsevent', :require => RUBY_PLATFORM.include?('darwin') && 'rb-fsevent'
+ gem 'rb-inotify', require: RUBY_PLATFORM.include?('linux') && 'rb-inotify'
+ gem 'rb-fsevent', require: RUBY_PLATFORM.include?('darwin') && 'rb-fsevent'
gem 'transpec'
gem 'database_cleaner'
+ gem 'shoulda-matchers'
end
group :production do
- gem "SyslogLogger", :require => "syslog/logger"
- gem "daemons"
+ gem 'SyslogLogger', require: 'syslog/logger'
+ gem 'daemons'
+end
+
+# I18n
+gem 'rails-i18n', '~> 4.0.0'
+gem 'devise-i18n'
+
+# Rails Assets
+source 'http://rails-assets.org' do
+ gem 'rails-assets-morrisjs', '~> 0.5.1'
+ gem 'rails-assets-raphael', '~> 2.1.3'
+ gem 'rails-assets-footable', '~> 2.0.3'
+
+ # Use twitter bootstrap resources
+ gem 'rails-assets-bootstrap-sass-official', '~> 3.3.0'
+ gem 'rails-assets-tagmanager', '~> 3.0.1.0'
+ gem 'rails-assets-typeahead.js', '~> 0.10.5'
+ gem 'rails-assets-typeahead.js-bootstrap3.less'
+ gem 'rails-assets-respond'
+ gem 'rails-assets-eonasdan-bootstrap-datetimepicker', '~> 3.1.3'
+ gem 'rails-assets-jquery-tokeninput', '~> 1.7.0'
+
+ gem 'rails-assets-modernizr', '~> 2.0.6'
+ gem 'rails-assets-jquery-ui', '~> 1.11.4'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index f925a3a23..6f6451e35 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,6 +1,22 @@
+GIT
+ remote: https://github.com/afimb/ninoxe.git
+ revision: 98ca11f5ede4307a8f9930a3d2e63d6c2dbb8a27
+ specs:
+ ninoxe (1.2.5)
+ activerecord (~> 4.1.1)
+ activerecord-postgis-adapter
+ acts-as-taggable-on (>= 3)
+ acts_as_list (>= 0.1.6)
+ acts_as_tree (>= 1.1.0)
+ deep_cloneable (~> 2.0.0)
+ enumerize (~> 0.10.0)
+ foreigner (~> 1.7.4)
+ georuby (= 2.3.0)
+ georuby-ext (= 0.0.5)
+
GEM
remote: http://rubygems.org/
- remote: https://rails-assets.org/
+ remote: http://rails-assets.org/
specs:
RedCloth (4.2.9)
RedCloth (4.2.9-java)
@@ -30,6 +46,9 @@ GEM
activerecord-jdbcpostgresql-adapter (1.3.15)
activerecord-jdbc-adapter (~> 1.3.15)
jdbc-postgres (>= 9.1)
+ activerecord-postgis-adapter (2.2.2)
+ activerecord (>= 4.0.0, < 4.2.0)
+ rgeo-activerecord (~> 1.2)
activesupport (4.1.10)
i18n (~> 0.6, >= 0.6.9)
json (~> 1.7, >= 1.7.7)
@@ -62,7 +81,6 @@ GEM
builder (3.2.2)
calendar_helper (0.2.5)
open4
- callsite (0.0.11)
capistrano (2.13.5)
highline
net-scp (>= 1.0.0)
@@ -92,8 +110,7 @@ GEM
coffee-script-source (1.9.1)
daemons (1.1.9)
database_cleaner (1.4.1)
- dbf (2.0.9)
- fastercsv (~> 1.5)
+ dbf (3.0.3)
debug_inspector (0.0.2)
deep_cloneable (2.0.2)
activerecord (>= 3.1.0, < 5.0.0)
@@ -124,7 +141,7 @@ GEM
enumerize (0.10.1)
activesupport (>= 3.2)
erubis (2.7.0)
- execjs (2.4.0)
+ execjs (2.6.0)
factory_girl (4.5.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.5.0)
@@ -135,14 +152,13 @@ GEM
multipart-post (>= 1.2, < 3)
faraday_middleware (0.9.1)
faraday (>= 0.7.4, < 0.10)
- fastercsv (1.5.5)
- ffi (1.9.8)
- ffi (1.9.8-java)
- ffi-geos (1.0.0)
+ ffi (1.9.10)
+ ffi (1.9.10-java)
+ ffi-geos (1.1.0)
ffi (>= 1.0.0)
font-awesome-sass (4.2.2)
sass (~> 3.2)
- foreigner (1.6.0)
+ foreigner (1.7.4)
activerecord (>= 3.0.0)
formatador (0.2.5)
formtastic (2.3.1)
@@ -190,23 +206,16 @@ GEM
activesupport (>= 3.0.0, < 5)
multi_json (~> 1.2)
jdbc-postgres (9.4.1200)
- jquery-rails (3.1.2)
+ jquery-rails (3.1.4)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
- jquery-ui-rails (4.0.3)
- jquery-rails
- railties (>= 3.1.0)
- jquery-ui-sass-rails (4.0.3.0)
- jquery-rails
- jquery-ui-rails (= 4.0.3)
- railties (>= 3.1.0)
jruby-jars (1.7.19)
jruby-openssl (0.9.7-java)
jruby-rack (1.1.18)
jruby-rack-worker (0.10.0)
jruby-rack (>= 1.1.10)
- json (1.8.2)
- json (1.8.2-java)
+ json (1.8.3)
+ json (1.8.3-java)
language_engine (0.0.6)
rails (~> 4.1.1)
launchy (2.4.3)
@@ -214,9 +223,9 @@ GEM
launchy (2.4.3-java)
addressable (~> 2.3)
spoon (~> 0.0.1)
- letter_opener (1.3.0)
+ letter_opener (1.4.1)
launchy (~> 2.2)
- libv8 (3.16.14.7)
+ libv8 (3.16.14.11)
listen (2.8.6)
celluloid (>= 0.15.2)
rb-fsevent (>= 0.9.3)
@@ -225,17 +234,12 @@ GEM
mail (2.6.3)
mime-types (>= 1.16, < 3)
map_layers (0.0.4)
- meta_request (0.3.4)
- callsite (~> 0.0, >= 0.0.11)
- rack-contrib (~> 1.1)
- railties (>= 3.0.0, < 5.0.0)
method_source (0.8.2)
mime-types (2.4.3)
mimemagic (0.3.0)
mini_portile (0.6.2)
- minitest (5.6.1)
- modernizr-rails (2.0.6)
- multi_json (1.11.0)
+ minitest (5.8.3)
+ multi_json (1.11.2)
multipart-post (2.0.0)
nenv (0.2.0)
net-scp (1.2.1)
@@ -245,16 +249,7 @@ GEM
net-ssh (2.9.2)
net-ssh-gateway (1.2.0)
net-ssh (>= 2.6.5)
- newrelic_rpm (3.9.6.257)
- ninoxe (1.2.0)
- activerecord (~> 4.1.1)
- acts-as-taggable-on (>= 3)
- acts_as_list (>= 0.1.6)
- acts_as_tree (>= 1.1.0)
- deep_cloneable (~> 2.0.0)
- enumerize (~> 0.10.0)
- foreigner (= 1.6.0)
- georuby-ext (= 0.0.5)
+ newrelic_rpm (3.11.2.286)
nokogiri (1.6.6.2)
mini_portile (~> 0.6.0)
nokogiri (1.6.6.2-java)
@@ -273,6 +268,7 @@ GEM
websocket-driver (>= 0.2.0)
polyamorous (1.1.0)
activerecord (>= 3.0)
+ polylines (0.3.0)
pry (0.10.1)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
@@ -282,15 +278,13 @@ GEM
method_source (~> 0.8.1)
slop (~> 3.4)
spoon (~> 0.0)
- pry-rails (0.3.3)
+ pry-rails (0.3.4)
pry (>= 0.9.10)
quiet_assets (1.1.0)
railties (>= 3.1, < 5.0)
rabl (0.11.6)
activesupport (>= 2.3.14)
rack (1.5.3)
- rack-contrib (1.2.0)
- rack (>= 0.9.1)
rack-test (0.6.3)
rack (>= 1.0)
rails (4.1.10)
@@ -316,7 +310,10 @@ GEM
rails-assets-jquery (2.1.4)
rails-assets-jquery-tokeninput (1.7.0)
rails-assets-jquery (>= 1.5)
+ rails-assets-jquery-ui (1.11.4)
+ rails-assets-jquery (>= 1.6)
rails-assets-mocha (1.17.1)
+ rails-assets-modernizr (2.0.6)
rails-assets-moment (2.10.3)
rails-assets-morrisjs (0.5.1)
rails-assets-jquery (>= 2.1.0)
@@ -357,10 +354,13 @@ GEM
ffi (>= 0.5.0)
rdoc (4.2.0)
json (~> 1.4)
- ref (1.0.5)
+ ref (2.0.0)
responders (1.1.2)
railties (>= 3.2, < 4.2)
- rgeo (0.3.20)
+ rgeo (0.5.2)
+ rgeo-activerecord (1.2.0)
+ activerecord (~> 4.0)
+ rgeo (~> 0.3)
roo (1.13.2)
nokogiri
rubyzip
@@ -401,6 +401,8 @@ GEM
json (~> 1.7, >= 1.7.7)
rdoc (~> 4.0)
shellany (0.0.1)
+ shoulda-matchers (2.8.0)
+ activesupport (>= 3.0.0)
simple_form (3.1.0)
actionpack (~> 4.0)
activemodel (~> 4.0)
@@ -452,7 +454,7 @@ GEM
coffee-rails
tzinfo (1.2.2)
thread_safe (~> 0.1)
- uglifier (2.7.1)
+ uglifier (2.7.2)
execjs (>= 0.3.0)
json (>= 1.8.0)
warbler (1.4.5)
@@ -481,6 +483,7 @@ DEPENDENCIES
RedCloth
SyslogLogger
activerecord-jdbcpostgresql-adapter (~> 1.3.3)
+ activerecord-postgis-adapter
acts_as_list (~> 0.6.0)
acts_as_tree (~> 2.1.0)
apartment (~> 1.0.0)
@@ -514,8 +517,7 @@ DEPENDENCIES
guard-rspec
inherited_resources
jbuilder (~> 2.0)
- jquery-rails
- jquery-ui-sass-rails
+ jquery-rails (~> 3.1.4)
jruby-openssl
jruby-rack-worker
json
@@ -523,21 +525,22 @@ DEPENDENCIES
launchy
letter_opener
map_layers (= 0.0.4)
- meta_request
mimemagic
- modernizr-rails (~> 2.0.6)
newrelic_rpm
- ninoxe (= 1.2.0)
+ ninoxe!
pg
poltergeist
+ polylines
pry-rails
quiet_assets (~> 1.0)
rabl
- rails (= 4.1.10)
+ rails (~> 4.1.10)
rails-assets-bootstrap-sass-official (~> 3.3.0)!
rails-assets-eonasdan-bootstrap-datetimepicker (~> 3.1.3)!
rails-assets-footable (~> 2.0.3)!
rails-assets-jquery-tokeninput (~> 1.7.0)!
+ rails-assets-jquery-ui (~> 1.11.4)!
+ rails-assets-modernizr (~> 2.0.6)!
rails-assets-morrisjs (~> 0.5.1)!
rails-assets-raphael (~> 2.1.3)!
rails-assets-respond!
@@ -549,12 +552,14 @@ DEPENDENCIES
ransack
rb-fsevent
rb-inotify
+ rgeo (~> 0.5.2)
roo
rspec-rails (~> 3.1.0)
rubyzip (~> 1.1.7)
sass-rails (~> 4.0.3)
sawyer (~> 0.6.0)
sdoc (~> 0.4.0)
+ shoulda-matchers
simple_form (~> 3.1.0)
simplecov (~> 0.10.0)
spring
@@ -564,10 +569,10 @@ DEPENDENCIES
therubyrhino
transpec
turbolinks
- uglifier (>= 1.3.0)
+ uglifier (~> 2.7.2)
warbler
will_paginate (~> 3.0.7)
will_paginate-bootstrap (~> 1.0.1)
BUNDLED WITH
- 1.10.3
+ 1.11.2
diff --git a/README.md b/README.md
index 5f35e9da6..4fdf19e0e 100644
--- a/README.md
+++ b/README.md
@@ -70,7 +70,7 @@ Install web application
Get git source code :
```sh
cd
-git clone -b V3_0 git://github.com/afimb/chouette2
+git clone -b V3_1 git://github.com/afimb/chouette2
cd chouette2
```
Download gem librairies
diff --git a/app/assets/images/icons/edit-disabled.png b/app/assets/images/icons/edit-disabled.png
new file mode 100644
index 000000000..aaefed65c
--- /dev/null
+++ b/app/assets/images/icons/edit-disabled.png
Binary files differ
diff --git a/app/assets/javascripts/access_points.js.coffee b/app/assets/javascripts/access_points.coffee
index 56ae24d1e..56ae24d1e 100644
--- a/app/assets/javascripts/access_points.js.coffee
+++ b/app/assets/javascripts/access_points.coffee
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 212ccdff8..7193d0d21 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -6,7 +6,7 @@
//
//= require jquery
//= require jquery_ujs
-//= require jquery.ui.all
+//= require jquery-ui
//= require modernizr
//= require cocoon
//= require raphael
@@ -22,10 +22,12 @@
//= require footable/footable.filter
//= require footable/footable.paginate
//= require footable/footable.sort
+//= require tools
//= require_directory ./plugins
//= require_directory .
//= require_directory ./stop_areas
//= require_directory ./vehicle_journeys
+//= require_directory ./vehicle_journey_frequencies
//= require_directory ./import_tasks
//= require_directory ./compliance_check_tasks
//= require_directory ./compliance_checks
diff --git a/app/assets/javascripts/bootstrap.js.coffee b/app/assets/javascripts/bootstrap.coffee
index 4cd869397..4cd869397 100644
--- a/app/assets/javascripts/bootstrap.js.coffee
+++ b/app/assets/javascripts/bootstrap.coffee
diff --git a/app/assets/javascripts/compliance_check_tasks/index.js.coffee b/app/assets/javascripts/compliance_check_tasks/index.coffee
index aefafbf7f..aefafbf7f 100644
--- a/app/assets/javascripts/compliance_check_tasks/index.js.coffee
+++ b/app/assets/javascripts/compliance_check_tasks/index.coffee
diff --git a/app/assets/javascripts/compliance_check_tasks/new.js.coffee b/app/assets/javascripts/compliance_check_tasks/new.coffee
index e4b4ba763..e4b4ba763 100644
--- a/app/assets/javascripts/compliance_check_tasks/new.js.coffee
+++ b/app/assets/javascripts/compliance_check_tasks/new.coffee
diff --git a/app/assets/javascripts/compliance_checks/report.js.coffee b/app/assets/javascripts/compliance_checks/report.coffee
index 2bff8742e..2bff8742e 100644
--- a/app/assets/javascripts/compliance_checks/report.js.coffee
+++ b/app/assets/javascripts/compliance_checks/report.coffee
diff --git a/app/assets/javascripts/export_tasks/new.coffee b/app/assets/javascripts/export_tasks/new.coffee
new file mode 100644
index 000000000..f46711b6b
--- /dev/null
+++ b/app/assets/javascripts/export_tasks/new.coffee
@@ -0,0 +1,31 @@
+$(".export_tasks.new").ready ->
+ toggle_input = (li, enabled) ->
+ # Hide li block
+ li.toggle(enabled)
+ # Disable input/select to ignore it in POST data
+ li.find("input,select").attr("disabled", !enabled)
+
+ export_references_type_change = (event) ->
+ form = $(event.target).parents('form')
+
+ # Display the reference_ids input for the selected type
+ references_type = $(event.target).val()
+ for li in form.find("li.reference_ids")
+ li = $(li)
+ enabled = li.data("type") == references_type
+ toggle_input li, enabled
+
+ disabled_inputs = form.find("li.input").not("li.reference_ids").find("input:disabled,select:disabled")
+ for disabled_input in disabled_inputs
+ li = $(disabled_input).parents('li')
+ toggle_input li, true
+
+ hidden_attributes = $(event.target).find(":selected").data("hidden-attributes")
+ return unless hidden_attributes
+
+ hidden_attributes = hidden_attributes.split(',')
+ for attribute in hidden_attributes
+ li = form.find("##{form.attr('id')}_export_task_#{attribute}_input")
+ toggle_input li, false
+
+ $('form select[name="export_task[references_type]"]').change( export_references_type_change )
diff --git a/app/assets/javascripts/export_tasks/new.js.coffee b/app/assets/javascripts/export_tasks/new.js.coffee
deleted file mode 100644
index 466486df6..000000000
--- a/app/assets/javascripts/export_tasks/new.js.coffee
+++ /dev/null
@@ -1,14 +0,0 @@
-$(".export_tasks.new").ready ->
- export_references_type_change = (event) ->
- references_type = $(event.target).val()
-
- toggle_input = (li) ->
- enabled = (li.data("type") == references_type)
- # Hide li block
- li.toggle(enabled)
- # Disable textarea to ignore it in POST data
- li.find(".token-input").attr("disabled", !enabled)
-
- toggle_input($(li)) for li in $(event.target).parents('form').find("li.reference_ids")
-
- $('form select[name="export_task[references_type]"]').change( export_references_type_change )
diff --git a/app/assets/javascripts/exports/index.js.coffee b/app/assets/javascripts/exports/index.coffee
index 655819507..655819507 100644
--- a/app/assets/javascripts/exports/index.js.coffee
+++ b/app/assets/javascripts/exports/index.coffee
diff --git a/app/assets/javascripts/group_of_line.js.coffee b/app/assets/javascripts/group_of_line.coffee
index 737f343ba..737f343ba 100644
--- a/app/assets/javascripts/group_of_line.js.coffee
+++ b/app/assets/javascripts/group_of_line.coffee
diff --git a/app/assets/javascripts/help.js.coffee b/app/assets/javascripts/help.coffee
index 761567942..761567942 100644
--- a/app/assets/javascripts/help.js.coffee
+++ b/app/assets/javascripts/help.coffee
diff --git a/app/assets/javascripts/import_tasks.js.coffee b/app/assets/javascripts/import_tasks.coffee
index b273bce8b..864288848 100644
--- a/app/assets/javascripts/import_tasks.js.coffee
+++ b/app/assets/javascripts/import_tasks.coffee
@@ -13,3 +13,25 @@ jQuery ->
$(format_class + " #import_task_rule_parameter_set_id_input").toggle( )
$(check_input).change(import_check_change) for check_input in $('form input[name="import_task[no_save]"][type="checkbox"]')
+
+ $('[id$="_import_task_name"]').focusout ->
+ $this = $(this)
+ value = $this.val()
+ $('[id$="_import_task_name"]').each ->
+ if $(this) != $this
+ $(this).val value
+ return
+ return
+
+ $('[id$="_import_task_no_save"]').click ->
+ $('[id$="_import_task_no_save"]').prop 'checked', $(this).is(':checked')
+ return
+
+ $('[id$="_import_task_rule_parameter_set_id"]').focusout ->
+ $this = $(this)
+ value = $this.val()
+ $('[id$="_import_task_rule_parameter_set_id"]').each ->
+ if $(this) != $this
+ $(this).val value
+ return
+ return
diff --git a/app/assets/javascripts/import_tasks/index.js.coffee b/app/assets/javascripts/import_tasks/index.coffee
index 8966a2960..8966a2960 100644
--- a/app/assets/javascripts/import_tasks/index.js.coffee
+++ b/app/assets/javascripts/import_tasks/index.coffee
diff --git a/app/assets/javascripts/journey_pattern.js.coffee b/app/assets/javascripts/journey_pattern.coffee
index 0f203397b..0f203397b 100644
--- a/app/assets/javascripts/journey_pattern.js.coffee
+++ b/app/assets/javascripts/journey_pattern.coffee
diff --git a/app/assets/javascripts/lines/index.js.coffee b/app/assets/javascripts/lines/index.coffee
index 164c0e6be..164c0e6be 100644
--- a/app/assets/javascripts/lines/index.js.coffee
+++ b/app/assets/javascripts/lines/index.coffee
diff --git a/app/assets/javascripts/multiple_selection.js.coffee b/app/assets/javascripts/multiple_selection.coffee
index fc81fd5d0..fc81fd5d0 100644
--- a/app/assets/javascripts/multiple_selection.js.coffee
+++ b/app/assets/javascripts/multiple_selection.coffee
diff --git a/app/assets/javascripts/partials/ie_report.js.coffee.erb b/app/assets/javascripts/partials/ie_report.js.coffee.erb
index 20c6dbb16..5d42566ea 100644
--- a/app/assets/javascripts/partials/ie_report.js.coffee.erb
+++ b/app/assets/javascripts/partials/ie_report.js.coffee.erb
@@ -6,7 +6,8 @@ $(".imports.show, .exports.show, .compliance_checks.show").ready ->
setInterval(reloadPage,refreshInterval * 1000)
footableFilter = (parent, el) ->
- $(parent).footable().bind 'footable_filtering', (e) ->
+ no_pagination = $(parent).data('no-pagination') != true
+ $(parent).footable( { paginate: no_pagination } ).bind 'footable_filtering', (e) ->
selected = $("select#{el} option:selected").val()
if selected and selected.length > 0
e.filter += if e.filter and e.filter.length > 0 then ' ' + selected else selected
diff --git a/app/assets/javascripts/plugins/proj4js-defs.js b/app/assets/javascripts/plugins/proj4js-defs.js
index fe77a033c..01720e124 100644
--- a/app/assets/javascripts/plugins/proj4js-defs.js
+++ b/app/assets/javascripts/plugins/proj4js-defs.js
@@ -7,3 +7,16 @@ Proj4js.defs["EPSG:27572"] = "+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.
Proj4js.defs["EPSG:27573"] = "+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"
Proj4js.defs["EPSG:27574"] = "+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"
Proj4js.defs["EPSG:2154"] = "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3942"] = "+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3943"] = "+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3944"] = "+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3945"] = "+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3946"] = "+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3947"] = "+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3948"] = "+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3949"] = "+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3950"] = "+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:2975"] = "+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:2972"] = "+proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:3312"] = "+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs"
+Proj4js.defs["EPSG:4559"] = "+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
diff --git a/app/assets/javascripts/plugins/tooltip.coffee b/app/assets/javascripts/plugins/tooltip.coffee
new file mode 100644
index 000000000..cd92daf78
--- /dev/null
+++ b/app/assets/javascripts/plugins/tooltip.coffee
@@ -0,0 +1,3 @@
+jQuery ->
+ $('[data-toggle="tooltip"]').tooltip()
+ $('.progress').tooltip()
diff --git a/app/assets/javascripts/plugins/tooltip.js.coffee b/app/assets/javascripts/plugins/tooltip.js.coffee
deleted file mode 100644
index 91b8b5cc6..000000000
--- a/app/assets/javascripts/plugins/tooltip.js.coffee
+++ /dev/null
@@ -1,3 +0,0 @@
-jQuery ->
- $('input').tooltip()
- $('.progress').tooltip()
diff --git a/app/assets/javascripts/route.js.coffee b/app/assets/javascripts/route.coffee
index ea2984d02..ea2984d02 100644
--- a/app/assets/javascripts/route.js.coffee
+++ b/app/assets/javascripts/route.coffee
diff --git a/app/assets/javascripts/route_section.js.coffee b/app/assets/javascripts/route_section.js.coffee
new file mode 100644
index 000000000..5c721cdfb
--- /dev/null
+++ b/app/assets/javascripts/route_section.js.coffee
@@ -0,0 +1,93 @@
+class @RouteSectionMap
+ @onSelectedFeature: (feature) ->
+ route_section_id = feature.data.id
+
+ routeSectionOption = $("option[value=#{route_section_id}]")
+ routeSectionOption.parent().val route_section_id
+ RouteSectionMap.changeStyle(routeSectionOption.parent())
+
+ $('#map-selection').show()
+ $('#empty-map-selection').hide()
+
+ selectionUrl = location.pathname.replace /edit$/, "selection"
+ $.ajax(url: selectionUrl, method: 'POST', data: { route_section_id: route_section_id }, dataType: 'html').done (data) ->
+ $('#map-selection div').replaceWith(data)
+
+ @onUnselectedFeature: (feature) ->
+ $('#map-selection').hide()
+ $('#empty-map-selection').show()
+
+ @editRoute = (el) ->
+ new_route_section_id = $(el).val()
+ edit_link = $(el).closest("tr").find("a.edit-route-section")
+
+ # Save edit link to play with it
+ unless edit_link.data("href-pattern")?
+ edit_link.data "href-pattern", edit_link.attr('href').replace(new RegExp("/route_sections/([0-9]+)/edit"), "/route_sections/:id/edit")
+
+ if !!new_route_section_id
+ edit_link.removeClass "disabled"
+ edit_link.attr 'href', edit_link.data("href-pattern").replace(/:id/, new_route_section_id)
+ else
+ edit_link.addClass "disabled"
+ edit_link.attr 'href', '#'
+
+ @featureStyle = (id, erase) ->
+ if id
+ features = route_section_geometry.getFeaturesByAttribute('id', id.toString())
+ if features.length > 0
+ $.each features, (key, feature) ->
+ style = null
+ if !erase
+ style =
+ strokeWidth: 3
+ strokeColor: 'green'
+ feature.style = style
+ feature.layer.redraw()
+
+ @changeStyle = (el) ->
+ id = $(el).val()
+ options = $(el).find('option').map(->
+ $(this).val()
+ )
+ $.each options, (key, value) ->
+ RouteSectionMap.featureStyle value, true
+ return
+ RouteSectionMap.featureStyle id, false
+ RouteSectionMap.editRoute el
+
+jQuery ->
+ $route_sections_selector = $('[name^="route_sections_selector[sections_attributes]"]')
+ $.each $route_sections_selector, (index, el) ->
+ RouteSectionMap.changeStyle el
+
+ if $("#map.route_section").length > 0 and user_geometry?
+ projWGS84 = new OpenLayers.Projection("EPSG:4326")
+ proj900913 = new OpenLayers.Projection("EPSG:900913")
+ wtk_format = new OpenLayers.Format.WKT()
+
+ user_geometry.events.on({
+ featureclick: (event) ->
+ $('circle[stroke-opacity="0.3"]').attr('stroke-opacity', '0.6').attr('fill-opacity', '0.6')
+ afterfeaturemodified: (event) ->
+ efg = event.feature.geometry
+ wgs84_geometry = efg.transform(proj900913, projWGS84)
+ wgs84_feature = new OpenLayers.Feature.Vector(wgs84_geometry)
+ ewtk = "SRID=4326;#{wtk_format.write(wgs84_feature)}"
+
+ $('#route_section_editable_geometry').val(ewtk)
+ efg.transform(projWGS84, proj900913)
+ return
+ })
+
+ $('#new_route_sections_selector select').on 'change', ->
+ RouteSectionMap.changeStyle this
+
+ $('form.route_section').find('button[type="submit"]').on 'click', (e) ->
+ e.preventDefault();
+ if typeof modify_feature != 'undefined'
+ modify_feature.deactivate()
+ $('form.route_section').submit()
+ return
+
+ return
diff --git a/app/assets/javascripts/rule_parameter_set.js.coffee b/app/assets/javascripts/rule_parameter_set.coffee
index bb1e2226b..bb1e2226b 100644
--- a/app/assets/javascripts/rule_parameter_set.js.coffee
+++ b/app/assets/javascripts/rule_parameter_set.coffee
diff --git a/app/assets/javascripts/stop_areas/edit.js.coffee b/app/assets/javascripts/stop_areas/edit.coffee
index d1d945ebf..d1d945ebf 100644
--- a/app/assets/javascripts/stop_areas/edit.js.coffee
+++ b/app/assets/javascripts/stop_areas/edit.coffee
diff --git a/app/assets/javascripts/stop_areas/index.js.coffee b/app/assets/javascripts/stop_areas/index.coffee
index dff016666..dff016666 100644
--- a/app/assets/javascripts/stop_areas/index.js.coffee
+++ b/app/assets/javascripts/stop_areas/index.coffee
diff --git a/app/assets/javascripts/time_tables.js.coffee b/app/assets/javascripts/time_tables.coffee
index ccc4fe0fe..ccc4fe0fe 100644
--- a/app/assets/javascripts/time_tables.js.coffee
+++ b/app/assets/javascripts/time_tables.coffee
diff --git a/app/assets/javascripts/timebands.coffee b/app/assets/javascripts/timebands.coffee
new file mode 100644
index 000000000..24f83d18b
--- /dev/null
+++ b/app/assets/javascripts/timebands.coffee
@@ -0,0 +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://coffeescript.org/
diff --git a/app/assets/javascripts/tools.coffee b/app/assets/javascripts/tools.coffee
new file mode 100644
index 000000000..04b61cde6
--- /dev/null
+++ b/app/assets/javascripts/tools.coffee
@@ -0,0 +1,32 @@
+(($) ->
+ $ ->
+ $('.ce-hide').removeClass 'ce-hide'
+ sidebar = $('#sidebar').text().trim().length > 0
+ if (sidebar)
+ $('#map').before('<button id="ce-SidebarNavBlock" class="hide"><i class="fa fa-bars"></i></button>')
+ $('[data-ce-action]').click (e) ->
+ e.preventDefault()
+ action = $(this).data('ce-action')
+ id = $(this).data('ce-id')
+ $map = $('#'+id)
+ if (action == 'map-fullscreen')
+ if $map.hasClass('ce-MapBlock-fullWidth')
+ $map.removeClass('ce-MapBlock-fullWidth')
+ $map.css('height', '')
+ else
+ offset_top = $map.offset().top + 2
+ height = $(window).height() - offset_top
+ $map.addClass('ce-MapBlock-fullWidth')
+ $map.css('height', height)
+ if sidebar
+ $('#sidebar').toggleClass('hide')
+ $('#sidebar').toggleClass('ce-SidebarFloatBlock')
+ $('#ce-SidebarNavBlock').toggleClass('hide')
+ $map.closest('.col-md-9, .col-md-12').toggleClass('col-md-9 col-md-12')
+ $map.find('i').toggleClass('fa-expand fa-compress')
+ map.updateSize()
+ if sidebar
+ $('#ce-SidebarNavBlock').click (e) ->
+ e.preventDefault()
+ $('.ce-SidebarFloatBlock').toggleClass('hide')
+) jQuery
diff --git a/app/assets/javascripts/vehicle_journey.js.coffee b/app/assets/javascripts/vehicle_journey.coffee
index 54b359b7a..d87df7cd4 100644
--- a/app/assets/javascripts/vehicle_journey.js.coffee
+++ b/app/assets/javascripts/vehicle_journey.coffee
@@ -1,6 +1,6 @@
jQuery ->
swap_hour_minute = ( from, to) ->
- rows = $('.vehicle_journeys tbody.journey_pattern_dependent_list tr.time')
+ rows = $('tbody.journey_pattern_dependent_list tr.time')
for row in rows
do (row) ->
$(row).find( to).find('.hour')[0].value = $(row).find( from).find('.hour')[0].value
@@ -8,15 +8,15 @@ jQuery ->
copy_departures_to_arrivals = (event) ->
event.preventDefault()
- swap_hour_minute( '.departure_time', '.arrival_time')
+ swap_hour_minute('.departure_time', '.arrival_time')
- $(document).on("click", '.vehicle_journeys a.to_arrivals', copy_departures_to_arrivals)
+ $(document).on('click', '[data-ce-action="to_arrivals"]', copy_departures_to_arrivals)
copy_arrivals_to_departures = (event) ->
event.preventDefault()
- swap_hour_minute( '.arrival_time', '.departure_time')
+ swap_hour_minute('.arrival_time', '.departure_time')
- $(document).on("click", '.vehicle_journeys a.to_departures', copy_arrivals_to_departures)
+ $(document).on('click', '[data-ce-action="to_departures"]', copy_arrivals_to_departures)
switch_vehicle_journey_at_stops = (event) ->
event.preventDefault()
@@ -55,8 +55,8 @@ jQuery ->
hour = parseInt( $(".vehicle_journey_at_stops select#date_hour").val())
minute = parseInt( $(".vehicle_journey_at_stops select#date_minute").val())
departure_or_arrival = $(".departure_or_arrival option:selected").val()
-
- selector_prefix = ".vehicle_journey_at_stops .journey_pattern_dependent_list"
+ console.log(hour)
+ selector_prefix = ".journey_pattern_dependent_list"
if (departure_or_arrival == "departure")
vjas_hour_selector = selector_prefix + " .departure_time select.hour"
vjas_minute_selector = selector_prefix + " .departure_time select.minute"
@@ -66,10 +66,10 @@ jQuery ->
vjas_hour = $( vjas_hour_selector).prop( "selectedIndex" )
vjas_minute = $( vjas_minute_selector).prop( "selectedIndex" )
-
+ console.log(vjas_hour_selector)
duration = (hour - vjas_hour) * 60 + (minute - vjas_minute)
-
+ console.log(duration)
slide_to( '.departure_time', duration)
slide_to( '.arrival_time', duration)
- $(document).on("click", '.vehicle_journeys a.slide', slide) \ No newline at end of file
+ $(document).on("click", '.vehicle_journeys a.slide', slide)
diff --git a/app/assets/javascripts/vehicle_journey_import.js.coffee b/app/assets/javascripts/vehicle_journey_frequencies.coffee
index e69de29bb..e69de29bb 100644
--- a/app/assets/javascripts/vehicle_journey_import.js.coffee
+++ b/app/assets/javascripts/vehicle_journey_frequencies.coffee
diff --git a/app/assets/javascripts/vehicle_journey_frequencies/index.coffee b/app/assets/javascripts/vehicle_journey_frequencies/index.coffee
new file mode 100644
index 000000000..4f4fccc18
--- /dev/null
+++ b/app/assets/javascripts/vehicle_journey_frequencies/index.coffee
@@ -0,0 +1,4 @@
+$(".vehicle_journey_frequencies.index").ready ->
+ $( 'body' ).popover({html: true, trigger: "click", selector: '[rel="popover"]'}).on("show.bs.popover", (event)->
+ $('[aria-describedby]').click()
+ $(event.target).data("bs.popover").tip().css("maxWidth", "350px"))
diff --git a/app/assets/javascripts/vehicle_journey_import.coffee b/app/assets/javascripts/vehicle_journey_import.coffee
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/assets/javascripts/vehicle_journey_import.coffee
diff --git a/app/assets/javascripts/vehicle_journeys/index.js.coffee b/app/assets/javascripts/vehicle_journeys/index.coffee
index e89c3f519..02de558d4 100644
--- a/app/assets/javascripts/vehicle_journeys/index.js.coffee
+++ b/app/assets/javascripts/vehicle_journeys/index.coffee
@@ -4,4 +4,3 @@ $(".vehicle_journeys.index").ready ->
.on("show.bs.popover", (event)->
$(event.target).data("bs.popover").tip().css("maxWidth", "350px"))
- \ No newline at end of file
diff --git a/app/assets/javascripts/vehicle_journeys/show.js.coffee b/app/assets/javascripts/vehicle_journeys/show.coffee
index 103937d7b..103937d7b 100644
--- a/app/assets/javascripts/vehicle_journeys/show.js.coffee
+++ b/app/assets/javascripts/vehicle_journeys/show.coffee
diff --git a/app/assets/stylesheets/application.css.scss.erb b/app/assets/stylesheets/application.scss.erb
index 52405c14c..dab6ff320 100644
--- a/app/assets/stylesheets/application.css.scss.erb
+++ b/app/assets/stylesheets/application.scss.erb
@@ -17,6 +17,7 @@ $body-bg: #eee;
@import "modules/progress_bars";
// Partials
+@import "partials/base";
@import "partials/header";
@import "partials/footer";
@@ -24,7 +25,7 @@ $body-bg: #eee;
@import "tagmanager/tagmanager";
@import "font-awesome-sprockets";
@import "font-awesome";
-@import "jquery.ui.all";
+@import "jquery-ui";
@import "morrisjs";
@import "formtastic";
@import 'eonasdan-bootstrap-datetimepicker';
diff --git a/app/assets/stylesheets/main/access_links.css.scss b/app/assets/stylesheets/main/access_links.scss
index 1511b06a0..1511b06a0 100644
--- a/app/assets/stylesheets/main/access_links.css.scss
+++ b/app/assets/stylesheets/main/access_links.scss
diff --git a/app/assets/stylesheets/main/access_points.css.scss b/app/assets/stylesheets/main/access_points.scss
index af6a09ee7..af6a09ee7 100644
--- a/app/assets/stylesheets/main/access_points.css.scss
+++ b/app/assets/stylesheets/main/access_points.scss
diff --git a/app/assets/stylesheets/main/api_keys.css.scss b/app/assets/stylesheets/main/api_keys.scss
index 5ac873da7..61dff90b8 100644
--- a/app/assets/stylesheets/main/api_keys.css.scss
+++ b/app/assets/stylesheets/main/api_keys.scss
@@ -4,5 +4,8 @@
#workspace.api_keys.show
{
+ .summary p label {
+ font-weight: bold;
+ }
}
diff --git a/app/assets/stylesheets/main/calendar.css.scss b/app/assets/stylesheets/main/calendar.scss
index b8c04b6f4..b8c04b6f4 100644
--- a/app/assets/stylesheets/main/calendar.css.scss
+++ b/app/assets/stylesheets/main/calendar.scss
diff --git a/app/assets/stylesheets/main/companies.css.scss b/app/assets/stylesheets/main/companies.scss
index 481b2ee7b..481b2ee7b 100644
--- a/app/assets/stylesheets/main/companies.css.scss
+++ b/app/assets/stylesheets/main/companies.scss
diff --git a/app/assets/stylesheets/main/compliance_check_tasks.css.scss b/app/assets/stylesheets/main/compliance_check_tasks.scss
index 64c6a2f94..64c6a2f94 100644
--- a/app/assets/stylesheets/main/compliance_check_tasks.css.scss
+++ b/app/assets/stylesheets/main/compliance_check_tasks.scss
diff --git a/app/assets/stylesheets/main/compliance_checks.css.scss b/app/assets/stylesheets/main/compliance_checks.scss
index d31dfab62..d31dfab62 100644
--- a/app/assets/stylesheets/main/compliance_checks.css.scss
+++ b/app/assets/stylesheets/main/compliance_checks.scss
diff --git a/app/assets/stylesheets/main/connection_links.css.scss b/app/assets/stylesheets/main/connection_links.scss
index 5e5186ccf..5e5186ccf 100644
--- a/app/assets/stylesheets/main/connection_links.css.scss
+++ b/app/assets/stylesheets/main/connection_links.scss
diff --git a/app/assets/stylesheets/main/errors.css.scss b/app/assets/stylesheets/main/errors.scss
index b314da37a..b314da37a 100644
--- a/app/assets/stylesheets/main/errors.css.scss
+++ b/app/assets/stylesheets/main/errors.scss
diff --git a/app/assets/stylesheets/main/export_tasks.css.scss b/app/assets/stylesheets/main/export_tasks.scss
index 5c04b8ea0..5c04b8ea0 100644
--- a/app/assets/stylesheets/main/export_tasks.css.scss
+++ b/app/assets/stylesheets/main/export_tasks.scss
diff --git a/app/assets/stylesheets/main/exports.css.scss b/app/assets/stylesheets/main/exports.scss
index d2ee1cb86..d2ee1cb86 100644
--- a/app/assets/stylesheets/main/exports.css.scss
+++ b/app/assets/stylesheets/main/exports.scss
diff --git a/app/assets/stylesheets/main/group_of_lines.css.scss b/app/assets/stylesheets/main/group_of_lines.scss
index 7e8b7590d..7e8b7590d 100644
--- a/app/assets/stylesheets/main/group_of_lines.css.scss
+++ b/app/assets/stylesheets/main/group_of_lines.scss
diff --git a/app/assets/stylesheets/main/help.css.scss b/app/assets/stylesheets/main/help.scss
index ebffedc92..ebffedc92 100644
--- a/app/assets/stylesheets/main/help.css.scss
+++ b/app/assets/stylesheets/main/help.scss
diff --git a/app/assets/stylesheets/main/import_tasks.css.scss b/app/assets/stylesheets/main/import_tasks.scss
index 3a0d48ddf..3a0d48ddf 100644
--- a/app/assets/stylesheets/main/import_tasks.css.scss
+++ b/app/assets/stylesheets/main/import_tasks.scss
diff --git a/app/assets/stylesheets/main/imports.css.scss b/app/assets/stylesheets/main/imports.scss
index 32a20d1c4..32a20d1c4 100644
--- a/app/assets/stylesheets/main/imports.css.scss
+++ b/app/assets/stylesheets/main/imports.scss
diff --git a/app/assets/stylesheets/main/journey_patterns.css.scss b/app/assets/stylesheets/main/journey_patterns.scss
index 07ed52b9e..51547b05d 100644
--- a/app/assets/stylesheets/main/journey_patterns.css.scss
+++ b/app/assets/stylesheets/main/journey_patterns.scss
@@ -49,7 +49,7 @@
padding-left: 4px;
}
}
-
-}
-
-
+}
+#middle #sidebar a.control-shape {
+ color: orange;
+}
diff --git a/app/assets/stylesheets/main/layout.css.scss b/app/assets/stylesheets/main/layout.scss
index 0a9ade3a8..cd1cea37e 100644
--- a/app/assets/stylesheets/main/layout.css.scss
+++ b/app/assets/stylesheets/main/layout.scss
@@ -17,7 +17,12 @@ ol.breadcrumb{
margin-top: 10px;
}
+.ce-hide {
+ display: none;
+}
+
#middle{
+ position: relative;
min-height: 500px;
-webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, .2);
box-shadow: 0 0 5px 2px rgba(0, 0, 0, .2);
@@ -37,7 +42,15 @@ ol.breadcrumb{
height: 100%;
padding-top: 20px;
border-left: 1px solid $gray-lighter;
-
+
+ &.ce-SidebarFloatBlock {
+ position: absolute;
+ height: auto;
+ right: 0;
+ background-color: #fff;
+ top: 45px;
+ }
+
label {
color: #555555;
font-weight: normal;
diff --git a/app/assets/stylesheets/main/lines.css.scss b/app/assets/stylesheets/main/lines.scss
index 94201212a..e114a2338 100644
--- a/app/assets/stylesheets/main/lines.css.scss
+++ b/app/assets/stylesheets/main/lines.scss
@@ -78,7 +78,30 @@
display: inline;
}
}
-}
-
-
+}
+.ce-LineBlock-header-list {
+ display: table;
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ > li {
+ display: table-cell;
+ vertical-align: middle;
+ > input {
+ margin-top: 0;
+ }
+ &:first-child {
+ width: 37px;
+ }
+ &:last-child {
+ text-align: right;
+ width: 73px;
+ }
+ }
+}
+.ce-LineBlock-header-title {
+ padding: 0 !important;
+ line-height: 12px;
+ font-size: 13px;
+}
diff --git a/app/assets/stylesheets/main/networks.css.scss b/app/assets/stylesheets/main/networks.scss
index c8533699e..c8533699e 100644
--- a/app/assets/stylesheets/main/networks.css.scss
+++ b/app/assets/stylesheets/main/networks.scss
diff --git a/app/assets/stylesheets/main/organisations.css.scss b/app/assets/stylesheets/main/organisations.scss
index b3ef5b5f4..b3ef5b5f4 100644
--- a/app/assets/stylesheets/main/organisations.css.scss
+++ b/app/assets/stylesheets/main/organisations.scss
diff --git a/app/assets/stylesheets/main/referentials.css.scss b/app/assets/stylesheets/main/referentials.scss
index 8b6ae4b66..8b6ae4b66 100644
--- a/app/assets/stylesheets/main/referentials.css.scss
+++ b/app/assets/stylesheets/main/referentials.scss
diff --git a/app/assets/stylesheets/main/route_sections.css.scss b/app/assets/stylesheets/main/route_sections.css.scss
new file mode 100644
index 000000000..cc1c85abc
--- /dev/null
+++ b/app/assets/stylesheets/main/route_sections.css.scss
@@ -0,0 +1,68 @@
+#workspace.route_sections_selectors.edit {
+ td.route_section {
+ .input {
+ padding: 0;
+ margin: 0;
+
+ select {
+ width: 100%;
+ }
+ }
+ }
+
+ a.edit-route-section {
+ background: url(image-path('icons/edit.png')) no-repeat 0% 50%;
+ text-indent: -9999px;
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+
+ margin-right: 8px;
+
+ &.disabled {
+ background-image: url(image-path('icons/edit-disabled.png'));
+ }
+ }
+
+ #map-selection {
+ position: relative;
+ span {
+ display: inline-block;
+ }
+ .departure, .arrival {
+ width: 25%;
+ }
+ .actions {
+ width: 25%;
+ overflow: visible;
+ padding-left: 0;
+ position: absolute;
+ right: 0;
+ }
+ }
+}
+
+#workspace.route_sections.index {
+ th.distance, th.points {
+ text-align: center;
+ }
+
+ td.distance, td.points, td.actions {
+ text-align: center;
+ }
+}
+
+#workspace.route_sections.edit {
+ .formtastic {
+ .input .label {
+ width: 40%;
+ }
+ .actions {
+ padding-left: 19%;
+ }
+ }
+ #map {
+ width: 600px;
+ heigth: 600px;
+ }
+}
diff --git a/app/assets/stylesheets/main/routes.css.scss b/app/assets/stylesheets/main/routes.scss
index 7714c13a3..44703c7e5 100644
--- a/app/assets/stylesheets/main/routes.css.scss
+++ b/app/assets/stylesheets/main/routes.scss
@@ -3,7 +3,7 @@
// You can use Sass (SCSS) here: http://sass-lang.com/
#workspace.lines.show
-{
+{
}
#workspace.routes.edit, #workspace.routes.new, #workspace.routes.create, #workspace.routes.update
@@ -11,13 +11,13 @@
#route_color{ width: 100px;
color: white;
font-weight: bold;}
-
+
#stop_points .nested-fields {
ol {
margin-left: 25%;
- .handle { margin-left: 5px;}
+ .handle { margin-left: 5px;}
- .search_stop_area {
+ .search_stop_area {
margin-bottom: 0px !important;
}
@@ -31,7 +31,7 @@
#stop_points .links {
margin: 10px 0 15px 25%;
- }
+ }
}
#workspace.routes.edit_boarding_alighting{
@@ -39,10 +39,18 @@
.stop_area{
padding-top: 7px;
}
-
+
}
#workspace.routes.show
-{
-}
+{
+}
+.large-map {
+ width: 100%;
+ height: 600px;
+ #map {
+ width: 100%;
+ height: 100%;
+ }
+}
diff --git a/app/assets/stylesheets/main/rule_parameter_sets.css.scss b/app/assets/stylesheets/main/rule_parameter_sets.scss
index 7df394190..7df394190 100644
--- a/app/assets/stylesheets/main/rule_parameter_sets.css.scss
+++ b/app/assets/stylesheets/main/rule_parameter_sets.scss
diff --git a/app/assets/stylesheets/main/simple_form.css.scss b/app/assets/stylesheets/main/simple_form.scss
index 9282d89e0..9282d89e0 100644
--- a/app/assets/stylesheets/main/simple_form.css.scss
+++ b/app/assets/stylesheets/main/simple_form.scss
diff --git a/app/assets/stylesheets/main/stop_areas.css.scss b/app/assets/stylesheets/main/stop_areas.scss
index 59c243c26..c0bbe8a64 100644
--- a/app/assets/stylesheets/main/stop_areas.css.scss
+++ b/app/assets/stylesheets/main/stop_areas.scss
@@ -22,9 +22,7 @@
}
#map{
- float:none;
- width: 100%;
- height: 450px;
+ width: 50%;
}
}
diff --git a/app/assets/stylesheets/main/stop_points.css.scss b/app/assets/stylesheets/main/stop_points.scss
index b1ba9ff50..b1ba9ff50 100644
--- a/app/assets/stylesheets/main/stop_points.css.scss
+++ b/app/assets/stylesheets/main/stop_points.scss
diff --git a/app/assets/stylesheets/main/subscriptions.css.scss b/app/assets/stylesheets/main/subscriptions.scss
index 58a272cbd..58a272cbd 100644
--- a/app/assets/stylesheets/main/subscriptions.css.scss
+++ b/app/assets/stylesheets/main/subscriptions.scss
diff --git a/app/assets/stylesheets/main/time_table_combinations.css.scss b/app/assets/stylesheets/main/time_table_combinations.scss
index 70dc2e535..70dc2e535 100644
--- a/app/assets/stylesheets/main/time_table_combinations.css.scss
+++ b/app/assets/stylesheets/main/time_table_combinations.scss
diff --git a/app/assets/stylesheets/main/time_tables.css.scss b/app/assets/stylesheets/main/time_tables.scss
index bc1f48810..bc1f48810 100644
--- a/app/assets/stylesheets/main/time_tables.css.scss
+++ b/app/assets/stylesheets/main/time_tables.scss
diff --git a/app/assets/stylesheets/main/timebands.scss b/app/assets/stylesheets/main/timebands.scss
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/assets/stylesheets/main/timebands.scss
diff --git a/app/assets/stylesheets/main/users.css.scss b/app/assets/stylesheets/main/users.scss
index daaae0132..daaae0132 100644
--- a/app/assets/stylesheets/main/users.css.scss
+++ b/app/assets/stylesheets/main/users.scss
diff --git a/app/assets/stylesheets/main/vehicle_journey_frequencies.scss b/app/assets/stylesheets/main/vehicle_journey_frequencies.scss
new file mode 100644
index 000000000..d2052f790
--- /dev/null
+++ b/app/assets/stylesheets/main/vehicle_journey_frequencies.scss
@@ -0,0 +1,158 @@
+#workspace {
+ .ce-TimeBandFormTable {
+ .btn {
+ white-space: normal;
+ width: 130px;
+ font-size: 11px;
+ padding: 2px 0;
+ }
+ }
+ .ce-TimeBandFormTable th {
+ text-align: left;
+ padding: 6px 20px 6px 20px;
+ }
+ .ce-TimeBandFormTable td {
+ padding: 6px 20px 6px 20px;
+ }
+ .ce-TimeBandFormTable td {
+ vertical-align: middle;
+ }
+ .ce-TimeBandFormTable-circleLine {
+ position: relative;
+ }
+ .ce-TimeBandFormTable-line:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ width: 2px;
+ margin-left: -1px;
+ background-color: #61970b;
+ }
+ tr:first-child td .ce-TimeBandFormTable-line:after {
+ top: 50%;
+ }
+ tr:last-child td .ce-TimeBandFormTable-line:after {
+ bottom: 50%;
+ }
+ .ce-TimeBandFormTable-circle {
+ position: relative;
+ z-index: 999;
+ display: block;
+ width: 16px;
+ height: 16px;
+ border-radius: 8px;
+ background-color: #4d7809;
+ }
+ tr:hover .ce-TimeBandFormTable-circle {
+ background-color: #fff;
+ border: 2px solid #61970b;
+ }
+ .ce-FrequencyFormFields {
+ display: table;
+ width: 100%;
+ padding-left: 25%;
+ .token-input-list {
+ width: 80%;
+ }
+ .inline-errors {
+ margin: 0;
+ }
+ > li {
+ display: table-cell;
+ width: 21%;
+ vertical-align: top;
+ padding:0 ;
+ margin: 0;
+ &:first-child select {
+ width: 160px;
+ }
+ &:nth-last-child(2), &:last-child {
+ width: 8%;
+ }
+ label {
+ font-size: 13px;
+ padding-left: 0;
+ }
+ legend {
+ position: relative;
+ width: auto;
+ float: none;
+ border: 0;
+ label {
+ position: relative;
+ }
+ }
+ .fragments-group {
+ float: none;
+ width: auto;
+ padding: 0;
+ > li {
+ display: inline-block;
+ vertical-align: top;
+ }
+ }
+ }
+ }
+ &.vehicle_journey_frequencies {
+ .actions-add-fields {
+ clear: both;
+ padding-left: 25%;
+ margin-top: 10px;
+ }
+ }
+ td.ce-VehicleJourneyBlock-frequency {
+ background-color: rgba(95, 95, 95, 0.2);
+ }
+ .ce-VehicleJourneyFrequencyTableBlock {
+ margin: 0 !important;
+ }
+ .ce-VehicleJourneyFrequenciesMatrix {
+ margin: 0;
+ padding: 0;
+ > li {
+ background-color: #eee;
+ height: 22px;
+ margin-bottom: 20px;
+ position: relative;
+ > ul {
+ margin: 0;
+ padding: 0;
+ > li {
+ cursor: pointer;
+ position: absolute;
+ padding: 0 2px;
+ top: 0;
+ bottom: 0;
+ background-color: $brand-primary;
+ border-left: 1px solid #000;
+ border-right: 1px solid #000;
+ &:hover {
+ z-index: 9999;
+ background-color: #4d7809;
+ top: -2px;
+ bottom: -2px;
+ > span {
+ display: block;
+ }
+ }
+ }
+ }
+ }
+ }
+ .ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime,
+ .ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime {
+ display: none;
+ position: absolute;
+ top: -13px;
+ font-size: 11px;
+ color: #262626;
+ }
+ .ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime {
+ left: -32px;
+ }
+ .ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime {
+ right: -32px;
+ }
+}
diff --git a/app/assets/stylesheets/main/vehicle_journey_imports.css.scss b/app/assets/stylesheets/main/vehicle_journey_imports.scss
index 529182443..529182443 100644
--- a/app/assets/stylesheets/main/vehicle_journey_imports.css.scss
+++ b/app/assets/stylesheets/main/vehicle_journey_imports.scss
diff --git a/app/assets/stylesheets/main/vehicle_journeys.css.scss b/app/assets/stylesheets/main/vehicle_journeys.scss
index 119883fb4..6f67bc4b4 100644
--- a/app/assets/stylesheets/main/vehicle_journeys.css.scss
+++ b/app/assets/stylesheets/main/vehicle_journeys.scss
@@ -1,21 +1,30 @@
-// Place all the styles related to the routes controller here.
-// They will automatically be included in application.css.
-// You can use Sass (SCSS) here: http://sass-lang.com/
-
-#workspace.vehicle_journeys.edit, #workspace.vehicle_journeys.update, #workspace.vehicle_journeys.create, #workspace.vehicle_journeys.new {
+#workspace.vehicle_journeys.edit,
+#workspace.vehicle_journeys.update,
+#workspace.vehicle_journeys.create,
+#workspace.vehicle_journeys.new,
+#workspace.vehicle_journey_frequencies.edit,
+#workspace.vehicle_journey_frequencies.update,
+#workspace.vehicle_journey_frequencies.create,
+#workspace.vehicle_journey_frequencies.new {
#route_color{
width: 100px;
color: white;
font-weight: bold;
}
+ .btn {
+ padding: 6px 12px;
+ }
+
.time_table_list { padding-left: 25%; }
- #vehicle_journey_footnote_ids_input {
+ #vehicle_journey_footnote_ids_input,
+ #vehicle_journey_frequency_footnote_ids_input {
min-height: 3em;
}
- .vehicle_journey_at_stops {
+ .vehicle_journey_at_stops,
+ .vehicle_journey_frequency_at_stops {
margin-left: 25%;
thead, tbody, tfoot{
@@ -56,7 +65,8 @@
}
}
-#workspace.vehicle_journeys.index
+#workspace.vehicle_journeys.index,
+#workspace.vehicle_journey_frequencies.index
{
#search{
@@ -95,39 +105,44 @@
}
-#workspace.vehicle_journeys.show, #workspace.vehicle_journeys.edit, #workspace.vehicle_journeys.update, #workspace.vehicle_journeys.create, #workspace.vehicle_journeys.new {
-
- .to_departures {
- cursor: pointer;
- }
-
- .to_arrivals {
- cursor: pointer;
- }
+#workspace.vehicle_journeys.show,
+#workspace.vehicle_journeys.edit,
+#workspace.vehicle_journeys.update,
+#workspace.vehicle_journeys.create,
+#workspace.vehicle_journeys.new,
+#workspace.vehicle_journey_journey.show,
+#workspace.vehicle_journey_journey.edit,
+#workspace.vehicle_journey_journey.update,
+#workspace.vehicle_journey_journey.create,
+#workspace.vehicle_journey_journey.new {
.slide {
cursor: pointer;
}
}
-#workspace.vehicle_journeys.show
+#workspace.vehicle_journeys.show,
+#workspace.vehicle_journey_frequencies.show
{
.summary p label {
font-weight: bold;
}
}
-#workspace.vehicle_journeys.timeless
+#workspace.vehicle_journeys.timeless,
+#workspace.vehicle_journey_frequencies.timeless
{
.summary p label {
font-weight: bold;
}
- .vehicle_journeys {
+ .vehicle_journeys,
+ .vehicle_journey_frequencies {
margin-top: 20px;
}
- .vehicle_journey {
+ .vehicle_journey,
+ .vehicle_journey_frequency {
span.included_day_type {
font-weight: bolder;
diff --git a/app/assets/stylesheets/main/vehicle_translation.css.scss b/app/assets/stylesheets/main/vehicle_translation.scss
index f399d1a4a..f399d1a4a 100644
--- a/app/assets/stylesheets/main/vehicle_translation.css.scss
+++ b/app/assets/stylesheets/main/vehicle_translation.scss
diff --git a/app/assets/stylesheets/main/welcome.css.scss b/app/assets/stylesheets/main/welcome.scss
index 77ce11a74..77ce11a74 100644
--- a/app/assets/stylesheets/main/welcome.css.scss
+++ b/app/assets/stylesheets/main/welcome.scss
diff --git a/app/assets/stylesheets/modules/devise.css.scss b/app/assets/stylesheets/modules/devise.scss
index b99a016f5..b99a016f5 100644
--- a/app/assets/stylesheets/modules/devise.css.scss
+++ b/app/assets/stylesheets/modules/devise.scss
diff --git a/app/assets/stylesheets/modules/icons.css.scss b/app/assets/stylesheets/modules/icons.scss
index 001e511d1..3c42c3bd6 100644
--- a/app/assets/stylesheets/modules/icons.css.scss
+++ b/app/assets/stylesheets/modules/icons.scss
@@ -5,6 +5,11 @@ a:before {
vertical-align: middle;
}
+a.view:before { // fa-eye
+ content: "\f06e";
+ color: $brand-success;
+}
+
a.add:before { // fa-plus-circle
content: "\f055";
color: $brand-success;
diff --git a/app/assets/stylesheets/modules/index_item.css.scss b/app/assets/stylesheets/modules/index_item.scss
index e281854a8..e281854a8 100644
--- a/app/assets/stylesheets/modules/index_item.css.scss
+++ b/app/assets/stylesheets/modules/index_item.scss
diff --git a/app/assets/stylesheets/modules/job_status_colors.css.scss b/app/assets/stylesheets/modules/job_status_colors.scss
index 3c9086471..b3ae3d72c 100644
--- a/app/assets/stylesheets/modules/job_status_colors.css.scss
+++ b/app/assets/stylesheets/modules/job_status_colors.scss
@@ -1,4 +1,4 @@
.terminated{ color: $brand-success; }
-.processed{ color: $brand-info; }
+.processed{ color: $brand-info; box-shadow: none; }
.aborted{ color: $brand-danger; }
diff --git a/app/assets/stylesheets/modules/job_status_title.css.scss b/app/assets/stylesheets/modules/job_status_title.scss
index 65ce53efe..65ce53efe 100644
--- a/app/assets/stylesheets/modules/job_status_title.css.scss
+++ b/app/assets/stylesheets/modules/job_status_title.scss
diff --git a/app/assets/stylesheets/modules/links.css.scss b/app/assets/stylesheets/modules/links.scss
index b97927988..b97927988 100644
--- a/app/assets/stylesheets/modules/links.css.scss
+++ b/app/assets/stylesheets/modules/links.scss
diff --git a/app/assets/stylesheets/modules/progress_bars.css.scss b/app/assets/stylesheets/modules/progress_bars.scss
index 690a0f4ac..690a0f4ac 100644
--- a/app/assets/stylesheets/modules/progress_bars.css.scss
+++ b/app/assets/stylesheets/modules/progress_bars.scss
diff --git a/app/assets/stylesheets/modules/search.css.scss b/app/assets/stylesheets/modules/search.scss
index eeb35a8a5..eeb35a8a5 100644
--- a/app/assets/stylesheets/modules/search.css.scss
+++ b/app/assets/stylesheets/modules/search.scss
diff --git a/app/assets/stylesheets/partials/base.scss b/app/assets/stylesheets/partials/base.scss
new file mode 100644
index 000000000..e4258c277
--- /dev/null
+++ b/app/assets/stylesheets/partials/base.scss
@@ -0,0 +1,23 @@
+.formtastic.timeband {
+ .time_select {
+ .fragments {
+ .fragments-group {
+ padding-left: 0;
+ }
+ legend.label {
+ position: relative;
+ width: auto;
+ display: block;
+ width: 25%;
+ float: left;
+ border: none;
+ label {
+ position: relative;
+ width: auto;
+ font-size: 125%;
+ padding: .2em .6em .3em;
+ }
+ }
+ }
+ }
+}
diff --git a/app/assets/stylesheets/partials/footer.css.scss b/app/assets/stylesheets/partials/footer.scss
index a6b38b76d..a6b38b76d 100644
--- a/app/assets/stylesheets/partials/footer.css.scss
+++ b/app/assets/stylesheets/partials/footer.scss
diff --git a/app/assets/stylesheets/partials/header.css.scss b/app/assets/stylesheets/partials/header.scss
index 6f7b777f1..6f7b777f1 100644
--- a/app/assets/stylesheets/partials/header.css.scss
+++ b/app/assets/stylesheets/partials/header.scss
diff --git a/app/assets/stylesheets/partials/ie_report.css.scss b/app/assets/stylesheets/partials/ie_report.scss
index 55286d690..55286d690 100644
--- a/app/assets/stylesheets/partials/ie_report.css.scss
+++ b/app/assets/stylesheets/partials/ie_report.scss
diff --git a/app/assets/stylesheets/vendor/bootstrap_changes.css.scss b/app/assets/stylesheets/vendor/bootstrap_changes.scss
index 67cf90ae4..6e2ccc1f6 100644
--- a/app/assets/stylesheets/vendor/bootstrap_changes.css.scss
+++ b/app/assets/stylesheets/vendor/bootstrap_changes.scss
@@ -11,6 +11,7 @@
span.included_day_type {
color: black;
+ font-weight: bold;
}
span.excluded_day_type {
}
@@ -32,3 +33,26 @@
color: $brand-success;
}
}
+.popover-title {
+ display: table;
+ width: 100%;
+ > a {
+ display: table-cell;
+ vertical-align: top;
+ &:first-child {
+ padding-right: 10px;
+ }
+ &:last-child {
+ width: 32px;
+ }
+ }
+}
+.popover-content {
+ > ul {
+ margin: 0;
+ padding: 0;
+ > li {
+ list-style: none !important;
+ }
+ }
+}
diff --git a/app/assets/stylesheets/vendor/formtastic_changes.css.scss b/app/assets/stylesheets/vendor/formtastic_changes.scss
index 7eb6b10c5..7eb6b10c5 100644
--- a/app/assets/stylesheets/vendor/formtastic_changes.css.scss
+++ b/app/assets/stylesheets/vendor/formtastic_changes.scss
diff --git a/app/assets/stylesheets/vendor/map_layers.css.scss b/app/assets/stylesheets/vendor/map_layers.css.scss
deleted file mode 100644
index 835417ddc..000000000
--- a/app/assets/stylesheets/vendor/map_layers.css.scss
+++ /dev/null
@@ -1,10 +0,0 @@
-p.after_map {
- clear: both;
-}
-
-#map {
- float: right;
- width: 400px;
- height: 400px;
- border: 1px solid gray;
-} \ No newline at end of file
diff --git a/app/assets/stylesheets/vendor/map_layers.scss b/app/assets/stylesheets/vendor/map_layers.scss
new file mode 100644
index 000000000..d093e3a4e
--- /dev/null
+++ b/app/assets/stylesheets/vendor/map_layers.scss
@@ -0,0 +1,39 @@
+p.after_map {
+ clear: both;
+}
+
+#map {
+ position: relative;
+ float: right;
+ width: 400px;
+ height: 400px;
+ border: 1px solid gray;
+ margin-bottom: 20px !important;
+}
+.ce-MapExpandBlock {
+ position: absolute;
+ top: -22px;
+ background-color: $brand-primary;
+ border: none;
+ height: 21px;
+ right: -1px;
+ color: white;
+ padding: 2px 6px !important;
+}
+#map.ce-MapBlock-fullWidth {
+ width: 100% !important;
+ display: block;
+ float: inherit;
+}
+#ce-SidebarNavBlock {
+ position: absolute;
+ top: 0;
+ right: 15px;
+ font-size: 20px;
+ height: 35px;
+ line-height: 35px;
+ padding: 0 10px;
+ border: none;
+ color: #fff;
+ background-color: $brand-primary;
+}
diff --git a/app/assets/stylesheets/vendor/openlayers_style.css b/app/assets/stylesheets/vendor/openlayers_style.scss
index 25308996f..68e60da55 100644
--- a/app/assets/stylesheets/vendor/openlayers_style.css
+++ b/app/assets/stylesheets/vendor/openlayers_style.scss
@@ -133,6 +133,11 @@ div.olControlMousePosition {
float:left;font-size:1.2em;
}
+.olPopup {
+ border-radius: 5px;
+ box-shadow: 0 0 6px #AAA;
+}
+
.olPopupContent {
padding:5px;
overflow: auto;
diff --git a/app/assets/stylesheets/vendor/pagination.css.scss b/app/assets/stylesheets/vendor/pagination.scss
index eb994f308..eb994f308 100644
--- a/app/assets/stylesheets/vendor/pagination.css.scss
+++ b/app/assets/stylesheets/vendor/pagination.scss
diff --git a/app/assets/stylesheets/vendor/simple_form.css.scss b/app/assets/stylesheets/vendor/simple_form.scss
index afac930c1..afac930c1 100644
--- a/app/assets/stylesheets/vendor/simple_form.css.scss
+++ b/app/assets/stylesheets/vendor/simple_form.scss
diff --git a/app/assets/stylesheets/vendor/typeahead.css.scss b/app/assets/stylesheets/vendor/typeahead.scss
index 56653de9d..56653de9d 100644
--- a/app/assets/stylesheets/vendor/typeahead.css.scss
+++ b/app/assets/stylesheets/vendor/typeahead.scss
diff --git a/app/controllers/access_links_controller.rb b/app/controllers/access_links_controller.rb
index 8a01453eb..d590aba00 100644
--- a/app/controllers/access_links_controller.rb
+++ b/app/controllers/access_links_controller.rb
@@ -17,7 +17,7 @@ class AccessLinksController < ChouetteController
def show
@map = AccessLinkMap.new(resource).with_helpers(self)
@access_point = Chouette::AccessPoint.find(params[:access_point_id])
- @access_link = Chouette::AccessLink.find(params[:id])
+ #@access_link = Chouette::AccessLink.find(params[:id])
@stop_area = @access_link.stop_area
show! do |format|
format.html {build_breadcrumb :show}
@@ -62,6 +62,15 @@ class AccessLinksController < ChouetteController
end
end
+ def update
+ @access_point = Chouette::AccessPoint.find(params[:access_point_id])
+ @access_link = Chouette::AccessLink.find(params[:id])
+ @stop_area = @access_link.stop_area
+ @orientation = @access_link.link_orientation_type
+ update! do |success, failure|
+ build_breadcrumb :edit
+ end
+ end
protected
diff --git a/app/controllers/api/v1/chouette_controller.rb b/app/controllers/api/v1/chouette_controller.rb
index c9ba27eeb..7805074ee 100644
--- a/app/controllers/api/v1/chouette_controller.rb
+++ b/app/controllers/api/v1/chouette_controller.rb
@@ -4,9 +4,9 @@ module Api
inherit_resources
respond_to :json, :xml
layout false
- before_filter :authenticate
+ before_action :authenticate
-private
+ private
def authenticate
authenticate_or_request_with_http_token do |token, options|
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index cdb304bbf..fa3874632 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,8 +1,8 @@
class ApplicationController < ActionController::Base
# TODO : Delete hack to authorize Cross Request for js and json get request from javascript
protect_from_forgery unless: -> { request.get? && (request.format.json? || request.format.js?) }
- before_filter :authenticate_user!
- before_filter :set_locale
+ before_action :authenticate_user!
+ before_action :set_locale
# Load helpers in rails engine
helper LanguageEngine::Engine.helpers
diff --git a/app/controllers/autocomplete_stop_areas_controller.rb b/app/controllers/autocomplete_stop_areas_controller.rb
index 0f5d15fc2..cd3521f6a 100644
--- a/app/controllers/autocomplete_stop_areas_controller.rb
+++ b/app/controllers/autocomplete_stop_areas_controller.rb
@@ -1,7 +1,7 @@
class AutocompleteStopAreasController < InheritedResources::Base
respond_to :json, :only => [:index, :children, :parent, :physicals]
- before_filter :switch_referential
+ before_action :switch_referential
def switch_referential
Apartment::Tenant.switch!(referential.slug)
@@ -26,7 +26,7 @@ class AutocompleteStopAreasController < InheritedResources::Base
else
result = referential.stop_areas
end
- @stop_areas = result.select{ |p| p.name =~ /#{params[:q]}/i }
+ @stop_areas = result.select{ |p| [p.name, p.registration_number, p.objectid].grep(/#{params[:q]}/i).any? }
@stop_areas
end
diff --git a/app/controllers/autocomplete_time_tables_controller.rb b/app/controllers/autocomplete_time_tables_controller.rb
index c556bb71c..ee0f8a0cb 100644
--- a/app/controllers/autocomplete_time_tables_controller.rb
+++ b/app/controllers/autocomplete_time_tables_controller.rb
@@ -1,10 +1,10 @@
class AutocompleteTimeTablesController < InheritedResources::Base
respond_to :json, :only => [:index]
- before_filter :switch_referential
+ before_action :switch_referential
def switch_referential
- Apartment::Database.switch(referential.slug)
+ Apartment::Tenant.switch!(referential.slug)
end
def referential
diff --git a/app/controllers/autocomplete_timebands_controller.rb b/app/controllers/autocomplete_timebands_controller.rb
new file mode 100644
index 000000000..3915bd69f
--- /dev/null
+++ b/app/controllers/autocomplete_timebands_controller.rb
@@ -0,0 +1,31 @@
+class AutocompleteTimebandsController < InheritedResources::Base
+ respond_to :json, :only => [:index]
+
+ before_action :switch_referential
+
+ def switch_referential
+ Apartment::Tenant.switch!(referential.slug)
+ end
+
+ def referential
+ @referential ||= current_organisation.referentials.find params[:referential_id]
+ end
+
+ protected
+
+ def select_timebands
+ if params[:route_id]
+ referential.timebands.joins( vehicle_journeys: :route).where( "routes.id IN (#{params[:route_id]})")
+ else
+ referential.timebands
+ end
+ end
+
+ def referential_timebands
+ @referential_timebands ||= select_timebands
+ end
+
+ def collection
+ @timebands = referential_timebands.select{ |p| p.fullname =~ /#{params[:q]}/i }
+ end
+end
diff --git a/app/controllers/breadcrumb_controller.rb b/app/controllers/breadcrumb_controller.rb
index 143651b52..29ecd262c 100644
--- a/app/controllers/breadcrumb_controller.rb
+++ b/app/controllers/breadcrumb_controller.rb
@@ -1,37 +1,37 @@
class BreadcrumbController < InheritedResources::Base
include BreadcrumbHelper
-
+
def show
- show! do
+ show! do
build_breadcrumb :show
end
end
-
+
def index
- index! do
+ index! do
build_breadcrumb :index
end
end
-
+
def edit
edit! do
build_breadcrumb :edit
end
end
- def update
+ def update
update! do |success, failure|
build_breadcrumb :edit
end
end
def new
- new! do
+ new! do
build_breadcrumb :new
end
end
-
+
def create
create! do |success, failure|
build_breadcrumb :new
diff --git a/app/controllers/chouette_controller.rb b/app/controllers/chouette_controller.rb
index ca33afba1..46691b13e 100644
--- a/app/controllers/chouette_controller.rb
+++ b/app/controllers/chouette_controller.rb
@@ -3,7 +3,7 @@ class ChouetteController < BreadcrumbController
include ApplicationHelper
include BreadcrumbHelper
- before_filter :switch_referential
+ before_action :switch_referential
def switch_referential
Apartment::Tenant.switch!(referential.slug)
diff --git a/app/controllers/compliance_check_tasks_controller.rb b/app/controllers/compliance_check_tasks_controller.rb
index 6c25d2d48..c2995c94d 100644
--- a/app/controllers/compliance_check_tasks_controller.rb
+++ b/app/controllers/compliance_check_tasks_controller.rb
@@ -11,7 +11,7 @@ class ComplianceCheckTasksController < ChouetteController
new!
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -23,7 +23,7 @@ class ComplianceCheckTasksController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
diff --git a/app/controllers/compliance_checks_controller.rb b/app/controllers/compliance_checks_controller.rb
index 39ae397e6..2d67aae98 100644
--- a/app/controllers/compliance_checks_controller.rb
+++ b/app/controllers/compliance_checks_controller.rb
@@ -14,7 +14,7 @@ class ComplianceChecksController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -26,7 +26,7 @@ class ComplianceChecksController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -52,7 +52,7 @@ class ComplianceChecksController < ChouetteController
render "rule_parameter_sets/show"
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -73,6 +73,11 @@ class ComplianceChecksController < ChouetteController
def resource
@compliance_check ||= compliance_check_service.find(params[:id])
+ @line_items = @compliance_check.report.line_items
+ if @line_items.size > 500
+ @line_items = @line_items.paginate(page: params[:page], per_page: 20)
+ end
+ @compliance_check
end
def collection
diff --git a/app/controllers/export_tasks_controller.rb b/app/controllers/export_tasks_controller.rb
index 9eedd1b94..2b30a5605 100644
--- a/app/controllers/export_tasks_controller.rb
+++ b/app/controllers/export_tasks_controller.rb
@@ -11,7 +11,7 @@ class ExportTasksController < ChouetteController
new!
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -24,7 +24,7 @@ class ExportTasksController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
diff --git a/app/controllers/exports_controller.rb b/app/controllers/exports_controller.rb
index d6e9cdf42..2cfa0b6fa 100644
--- a/app/controllers/exports_controller.rb
+++ b/app/controllers/exports_controller.rb
@@ -15,7 +15,7 @@ class ExportsController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -27,7 +27,7 @@ class ExportsController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -37,7 +37,7 @@ class ExportsController < ChouetteController
destroy!
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -51,7 +51,7 @@ class ExportsController < ChouetteController
send_file open(resource.file_path), { :type => "application/#{resource.filename_extension}", :disposition => "attachment", :filename => resource.filename }
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -64,6 +64,11 @@ class ExportsController < ChouetteController
def resource
@export ||= export_service.find( params[:id] )
+ @line_items = @export.report.line_items
+ if @line_items.size > 500
+ @line_items = @line_items.paginate(page: params[:page], per_page: 20)
+ end
+ @export
end
def collection
diff --git a/app/controllers/help_controller.rb b/app/controllers/help_controller.rb
index 7d4c3409d..4eec0fc75 100644
--- a/app/controllers/help_controller.rb
+++ b/app/controllers/help_controller.rb
@@ -1,7 +1,7 @@
class HelpController < ActionController::Base
layout "application"
protect_from_forgery
- before_filter :set_locale
+ before_action :set_locale
def set_locale
I18n.locale = session[:language] || I18n.default_locale
diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb
index bc5aae465..757e7f09e 100644
--- a/app/controllers/imports_controller.rb
+++ b/app/controllers/imports_controller.rb
@@ -16,7 +16,7 @@ class ImportsController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -28,7 +28,7 @@ class ImportsController < ChouetteController
end
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -38,7 +38,7 @@ class ImportsController < ChouetteController
destroy!
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -52,7 +52,7 @@ class ImportsController < ChouetteController
send_file open(resource.file_path), { :type => "application/#{resource.filename_extension}", :disposition => "attachment", :filename => resource.filename }
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -64,7 +64,7 @@ class ImportsController < ChouetteController
render "rule_parameter_sets/show"
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -82,7 +82,7 @@ class ImportsController < ChouetteController
render "compliance_checks/report"
rescue Ievkit::Error, Faraday::Error => error
logger.error("Iev failure : #{error.message}")
- flash[:error] = t('iev.exception.default')
+ flash[:error] = t(error.locale_for_error)
redirect_to referential_path(@referential)
end
end
@@ -96,6 +96,11 @@ class ImportsController < ChouetteController
def resource
@import ||= import_service.find( params[:id] )
+ @line_items = @import.report.line_items
+ if @line_items.size > 500
+ @line_items = @line_items.paginate(page: params[:page], per_page: 20)
+ end
+ @import
end
def collection
diff --git a/app/controllers/journey_patterns_controller.rb b/app/controllers/journey_patterns_controller.rb
index ce59d00b6..b7cdccc72 100644
--- a/app/controllers/journey_patterns_controller.rb
+++ b/app/controllers/journey_patterns_controller.rb
@@ -36,7 +36,8 @@ class JourneyPatternsController < ChouetteController
def new_vehicle_journey
@vehicle_journey = Chouette::VehicleJourney.new(:route_id => route.id)
@vehicle_journey.update_journey_pattern(resource)
- render "vehicle_journeys/select_journey_pattern"
+ vehicle_journey_category = params[:journey_category] ? "vehicle_journey_#{params[:journey_category]}" : 'vehicle_journey'
+ render "#{vehicle_journey_category.pluralize}/select_journey_pattern"
end
# overwrite inherited resources to use delete instead of destroy
diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb
index 6533278d2..50d8dcee3 100644
--- a/app/controllers/lines_controller.rb
+++ b/app/controllers/lines_controller.rb
@@ -52,12 +52,12 @@ class LinesController < ChouetteController
def filtered_lines_maps
filtered_lines.collect do |line|
- { :id => line.id, :name => line.published_name }
+ { :id => line.id, :name => (line.published_name ? line.published_name : line.name) }
end
end
def filtered_lines
- referential.lines.select{ |t| t.published_name =~ /#{params[:q]}/i }
+ referential.lines.select{ |t| [t.name, t.published_name].find { |e| /#{params[:q]}/i =~ e } }
end
def collection
@@ -83,7 +83,7 @@ class LinesController < ChouetteController
private
def line_params
- params.require(:line).permit( :transport_mode, :network_id, :company_id, :objectid, :object_version, :creation_time, :creator_id, :name, :number, :published_name, :transport_mode_name, :registration_number, :comment, :mobility_restricted_suitability, :int_user_needs, :flexible_service, :group_of_lines, :group_of_line_ids, :group_of_line_tokens, :url, :color, :text_color, { footnotes_attributes: [ :code, :label, :_destroy, :id ] } )
+ params.require(:line).permit( :transport_mode, :network_id, :company_id, :objectid, :object_version, :creation_time, :creator_id, :name, :number, :published_name, :transport_mode_name, :registration_number, :comment, :mobility_restricted_suitability, :int_user_needs, :flexible_service, :group_of_lines, :group_of_line_ids, :group_of_line_tokens, :url, :color, :text_color, :stable_id, { footnotes_attributes: [ :code, :label, :_destroy, :id ] } )
end
end
diff --git a/app/controllers/networks_controller.rb b/app/controllers/networks_controller.rb
index 5dff116c2..239f022b3 100644
--- a/app/controllers/networks_controller.rb
+++ b/app/controllers/networks_controller.rb
@@ -42,7 +42,7 @@ class NetworksController < ChouetteController
end
def network_params
- params.require(:network).permit(:objectid, :object_version, :creation_time, :creator_id, :version_date, :description, :name, :registration_number, :source_name, :source_type, :source_identifier, :comment )
+ params.require(:network).permit(:objectid, :object_version, :creation_time, :creator_id, :version_date, :description, :name, :registration_number, :source_name, :source_type_name, :source_identifier, :comment )
end
end
diff --git a/app/controllers/referentials_controller.rb b/app/controllers/referentials_controller.rb
index 375ce126a..b03aec7e1 100644
--- a/app/controllers/referentials_controller.rb
+++ b/app/controllers/referentials_controller.rb
@@ -18,7 +18,7 @@ class ReferentialsController < BreadcrumbController
format.json {
render :json => { :lines_count => resource.lines.count,
:networks_count => resource.networks.count,
- :vehicle_journeys_count => resource.vehicle_journeys.count,
+ :vehicle_journeys_count => resource.vehicle_journeys.count + resource.vehicle_journey_frequencies.count,
:time_tables_count => resource.time_tables.count,
:referential_id => resource.id}
}
diff --git a/app/controllers/route_sections_controller.rb b/app/controllers/route_sections_controller.rb
new file mode 100644
index 000000000..c1aaf732e
--- /dev/null
+++ b/app/controllers/route_sections_controller.rb
@@ -0,0 +1,75 @@
+class RouteSectionsController < ChouetteController
+
+ defaults :resource_class => Chouette::RouteSection
+
+ respond_to :html
+ respond_to :kml, :only => :show
+
+ belongs_to :referential
+
+ before_action :save_return_to_path, only: [:edit, :create_to_edit]
+ before_action ->(controller) { build_breadcrumb controller.action_name }
+
+ helper_method :search
+
+ def index
+ index!
+ end
+
+ def new
+ @stop_areas = referential.stop_areas.with_geometry.order :name
+ new!
+ end
+
+ def show
+ @map = RouteSectionMap.new(resource).with_helpers(self)
+ show!
+ end
+
+ def edit
+ @map = RouteSectionMap.new(resource, true).with_helpers(self)
+ edit!
+ end
+
+ def update
+ update! { session.delete(:return_to) }
+ end
+
+ def create
+ create! { session.delete(:return_to) }
+ end
+
+ def create_to_edit
+ route_section = Chouette::RouteSection.create(route_section_params)
+ if route_section.id
+ redirect_to edit_referential_route_section_path(referential, route_section)
+ else
+ flash[:alert] = I18n.t('route_sections.unable_to_contact_server')
+ redirect_to :back
+ end
+ end
+
+ protected
+
+ def save_return_to_path
+ session[:return_to] = params[:return_to] if params[:return_to]
+ end
+
+ def collection
+ # if q = params[:q]
+ # @route_sections ||= Chouette::RouteSection.joins(:departure, :arrival).where(departure: {name: "#{q}"}).or.where(arrival: {name: "#{q}"})
+ # end
+ @route_sections ||= search.collection.includes(:departure, :arrival).paginate page: params[:page]
+ end
+
+ def search
+ @search ||= RouteSectionSearch.new(params[:route_section_search])
+ end
+
+ private
+
+ def route_section_params
+ params.require(:route_section).permit(:departure_id, :arrival_id, :editable_geometry, :no_processing)
+ end
+
+end
diff --git a/app/controllers/route_sections_selectors_controller.rb b/app/controllers/route_sections_selectors_controller.rb
new file mode 100644
index 000000000..b5b5ebd48
--- /dev/null
+++ b/app/controllers/route_sections_selectors_controller.rb
@@ -0,0 +1,47 @@
+class RouteSectionsSelectorsController < ChouetteController
+
+ # singleton option makes association_chain crazy
+ #defaults singleton: true
+
+ respond_to :html, only: [ :edit, :update ]
+ respond_to :js, only: :section
+
+ belongs_to :referential do
+ belongs_to :line, :parent_class => Chouette::Line do
+ belongs_to :route, :parent_class => Chouette::Route do
+ belongs_to :journey_pattern, parent_class: Chouette::JourneyPattern
+ end
+ end
+ end
+
+ def edit
+ @map = RouteSectionSelectorMap.new(resource).with_helpers(self)
+ end
+
+ def update
+ update!
+ parent.control_route_sections
+ end
+
+ def selection
+ parent
+
+ @route_section = referential.route_sections.find params[:route_section_id].to_i
+ render partial: 'selection', format: 'js'
+ end
+
+ private
+
+ def resource
+ @route_sections_selector ||= RouteSectionsSelector.new parent
+ end
+
+ def build_resource
+ @route_sections_selector ||= RouteSectionsSelector.new parent, *resource_params
+ end
+
+ def route_section_selector_params
+ params.require(:route_section_selector).permit()
+ end
+
+end
diff --git a/app/controllers/routes_controller.rb b/app/controllers/routes_controller.rb
index 6dfaf3dd0..59c129867 100644
--- a/app/controllers/routes_controller.rb
+++ b/app/controllers/routes_controller.rb
@@ -75,7 +75,7 @@ class RoutesController < ChouetteController
end
private
-
+
def route_params
params.require(:route).permit( :direction_code, :wayback_code, :line_id, :objectid, :object_version, :creation_time, :creator_id, :name, :comment, :opposite_route_id, :published_name, :number, :direction, :wayback, { stop_points_attributes: [ :id, :_destroy, :position, :stop_area_id, :for_boarding, :for_alighting ] } )
end
diff --git a/app/controllers/stop_areas_controller.rb b/app/controllers/stop_areas_controller.rb
index 9321ac9ae..dbbadb80c 100644
--- a/app/controllers/stop_areas_controller.rb
+++ b/app/controllers/stop_areas_controller.rb
@@ -137,6 +137,6 @@ class StopAreasController < ChouetteController
def stop_area_params
params.require(:stop_area).permit( :routing_stop_ids, :routing_line_ids, :children_ids, :stop_area_type, :parent_id, :objectid, :object_version, :creation_time, :creator_id, :name, :comment, :area_type, :registration_number, :nearest_topic_name, :fare_code, :longitude, :latitude, :long_lat_type, :country_code, :street_name, :zip_code, :city_name, :mobility_restricted_suitability, :stairs_availability, :lift_availability, :int_user_needs, :coordinates, :url, :time_zone )
- end
+ end
end
diff --git a/app/controllers/timebands_controller.rb b/app/controllers/timebands_controller.rb
new file mode 100644
index 000000000..446255cac
--- /dev/null
+++ b/app/controllers/timebands_controller.rb
@@ -0,0 +1,20 @@
+class TimebandsController < ChouetteController
+
+ defaults :resource_class => Chouette::Timeband
+
+ respond_to :html
+
+ belongs_to :referential
+
+ def new
+ new! do
+ build_breadcrumb :new
+ end
+ end
+
+ private
+
+ def timeband_params
+ params.require(:timeband).permit( :name, :start_time, :end_time )
+ end
+end
diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb
index d86e66a09..d0dc82c1c 100644
--- a/app/controllers/users/registrations_controller.rb
+++ b/app/controllers/users/registrations_controller.rb
@@ -1,8 +1,8 @@
class Users::RegistrationsController < Devise::RegistrationsController
- before_filter :configure_sign_up_params, only: [:create]
- before_filter :configure_account_update_params, only: [:update]
+ before_action :configure_sign_up_params, only: [:create]
+ before_action :configure_account_update_params, only: [:update]
- prepend_before_filter :accept_user_creation, :only => [:new, :create]
+ prepend_before_action :accept_user_creation, only: [:new, :create]
protected
diff --git a/app/controllers/vehicle_journey_frequencies_controller.rb b/app/controllers/vehicle_journey_frequencies_controller.rb
new file mode 100644
index 000000000..683bd6d5a
--- /dev/null
+++ b/app/controllers/vehicle_journey_frequencies_controller.rb
@@ -0,0 +1,26 @@
+class VehicleJourneyFrequenciesController < VehicleJourneysController
+
+ defaults resource_class: Chouette::VehicleJourneyFrequency
+
+ def new
+ new! do
+ vehicle_journey.journey_frequencies.build
+ end
+ end
+
+ private
+
+ def vehicle_journey_frequency_params
+ params.require(:vehicle_journey_frequency).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name,
+ :published_journey_identifier, :comment, :transport_mode_name,
+ :mobility_restricted_suitability, :flexible_service, :status_value,
+ :facility, :vehicle_type_identifier, :objectid, :time_table_tokens,
+ { date: [ :hour, :minute ] }, :button, :referential_id, :line_id,
+ :route_id, :id, { vehicle_journey_at_stops_attributes: [ :arrival_time,
+ :id, :_destroy,
+ :stop_point_id,
+ :departure_time] },
+ { journey_frequencies_attributes: [ :id, :_destroy, :scheduled_headway_interval, :first_departure_time,
+ :last_departure_time, :exact_time, :timeband_id ] } )
+ end
+end
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb
index ace7aff5e..036816b21 100644
--- a/app/controllers/vehicle_journeys_controller.rb
+++ b/app/controllers/vehicle_journeys_controller.rb
@@ -28,7 +28,6 @@ class VehicleJourneysController < ChouetteController
def index
index! do
- @matrix ||= matrix
if collection.out_of_bounds?
redirect_to params.merge(:page => 1)
end
@@ -50,10 +49,11 @@ class VehicleJourneysController < ChouetteController
def collection
unless @vehicle_journeys
@vehicle_filter = VehicleFilter.new adapted_params
+ @vehicle_filter.journey_category_model = resource_class.model_name.route_key
@q = @vehicle_filter.vehicle_journeys.search @vehicle_filter.filtered_params
@vehicle_journeys = @q.result( :distinct => false ).paginate(:page => params[:page], :per_page => 8)
end
-
+ matrix
@vehicle_journeys
end
alias_method :vehicle_journeys, :collection
@@ -74,20 +74,21 @@ class VehicleJourneysController < ChouetteController
end
def matrix
- {}.tap do |hash|
- vehicle_journeys.each do |vj|
- vj.vehicle_journey_at_stops.each do |vjas|
- hash[ "#{vj.id}-#{vjas.stop_point_id}"] = vjas
- end
- end
- end
+ @matrix = resource_class.matrix(@vehicle_journeys)
end
-
private
def vehicle_journey_params
- params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name, :published_journey_identifier, :comment, :transport_mode_name, :mobility_restricted_suitability, :flexible_service, :status_value, :facility, :vehicle_type_identifier, :objectid, :time_table_tokens, { date: [ :hour, :minute ] }, :button, :referential_id, :line_id, :route_id, :id, { vehicle_journey_at_stops_attributes: [ :arrival_time, :id, :_destroy, :stop_point_id, :departure_time ] } )
+ params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name,
+ :published_journey_identifier, :comment, :transport_mode_name,
+ :mobility_restricted_suitability, :flexible_service, :status_value,
+ :facility, :vehicle_type_identifier, :objectid, :time_table_tokens,
+ { date: [ :hour, :minute ] }, :button, :referential_id, :line_id,
+ :route_id, :id, { vehicle_journey_at_stops_attributes: [ :arrival_time,
+ :id, :_destroy,
+ :stop_point_id,
+ :departure_time] } )
end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index d3e9655b9..e40093da9 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -51,6 +51,8 @@ module ApplicationHelper
"group_of_lines"
when path.include?("/vehicle_journeys")
"vehicle_journeys"
+ when path.include?("/vehicle_journey_frequencies")
+ "vehicle_journeys"
when path.include?("/journey_patterns")
"journey_patterns"
when path.include?("/routes")
@@ -67,7 +69,11 @@ module ApplicationHelper
"connection_links"
when path.include?("/time_tables")
"time_tables"
- when path.include?("/rule_parameter_set")
+ when path.include?("/timebands")
+ "timebands"
+ when path.include?("/route_sections")
+ "route_sections"
+ when path.include?("/rule_parameter_set")
"parametersets"
when path.include?("/import_tasks")
"imports"
diff --git a/app/helpers/breadcrumb_helper.rb b/app/helpers/breadcrumb_helper.rb
index c98691b72..69494321b 100644
--- a/app/helpers/breadcrumb_helper.rb
+++ b/app/helpers/breadcrumb_helper.rb
@@ -1,6 +1,7 @@
module BreadcrumbHelper
- def build_breadcrumb(action)
+ def build_breadcrumb(action)
+ action = action.to_sym
case resource_class.to_s
when "Chouette::Network"
network_breadcrumb action
@@ -16,6 +17,8 @@ module BreadcrumbHelper
journey_pattern_breadcrumb action
when "Chouette::VehicleJourney"
vehicle_journey_breadcrumb action
+ when "Chouette::VehicleJourneyFrequency"
+ vehicle_journey_frequency_breadcrumb action
when "VehicleJourneyImport"
vehicle_journey_import_breadcrumb action
when "Chouette::StopArea"
@@ -28,6 +31,10 @@ module BreadcrumbHelper
connection_link_breadcrumb action
when "Chouette::TimeTable"
time_table_breadcrumb action
+ when "Chouette::RouteSection"
+ route_section_breadcrumb action
+ when "Chouette::Timeband"
+ timeband_breadcrumb action
when "StopAreaCopy"
stop_area_copy_breadcrumb action
when "Import"
@@ -102,6 +109,18 @@ module BreadcrumbHelper
add_breadcrumb breadcrumb_label(@time_table), referential_time_table_path(@referential, @time_table),:title => breadcrumb_tooltip(@time_table) if action == :edit
end
+ def route_section_breadcrumb(action)
+ referential_breadcrumb
+ add_breadcrumb Chouette::RouteSection.model_name.human.pluralize, referential_route_sections_path(@referential)
+ add_breadcrumb breadcrumb_label(resource), referential_route_section_path(@referential, resource),:title => breadcrumb_tooltip(resource) if action.in?([:show, :edit])
+ end
+
+ def timeband_breadcrumb(action)
+ referential_breadcrumb
+ add_breadcrumb Chouette::Timeband.model_name.human(:count => 2), referential_timebands_path(@referential) unless action == :index
+ add_breadcrumb breadcrumb_label(@timeband), referential_timeband_path(@referential, @timeband),:title => breadcrumb_tooltip(@timeband) if action == :edit
+ end
+
def line_breadcrumb(action)
referential_breadcrumb
add_breadcrumb Chouette::Line.model_name.human(:count => 2), referential_lines_path(@referential) unless action == :index
@@ -124,6 +143,12 @@ module BreadcrumbHelper
add_breadcrumb breadcrumb_label(@vehicle_journey), referential_line_route_vehicle_journey_path(@referential, @line,@route,@vehicle_journey),:title => breadcrumb_tooltip(@vehicle_journey) if action == :edit
end
+ def vehicle_journey_frequency_breadcrumb(action)
+ route_breadcrumb :edit
+ add_breadcrumb I18n.t("breadcrumbs.vehicle_journey_frequencies"), referential_line_route_vehicle_journey_frequencies_path(@referential, @line, @route) unless action == :index
+ add_breadcrumb breadcrumb_label(@vehicle_journey_frequency), referential_line_route_vehicle_journey_frequency_path(@referential, @line,@route, @vehicle_journey_frequency),:title => breadcrumb_tooltip(@vehicle_journey_frequency) if action == :edit
+ end
+
def vehicle_journey_import_breadcrumb (action)
route_breadcrumb :edit
end
diff --git a/app/helpers/compliance_checks_helper.rb b/app/helpers/compliance_checks_helper.rb
index 897259853..d7e42e187 100644
--- a/app/helpers/compliance_checks_helper.rb
+++ b/app/helpers/compliance_checks_helper.rb
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
module ComplianceChecksHelper
-
+
def fields_for_compliance_check_format(form)
begin
render :partial => compliance_check_partial_name(form), :locals => { :form => form }
@@ -8,11 +8,11 @@ module ComplianceChecksHelper
""
end
end
-
+
def compliance_check_partial_name(form)
"fields_#{form.object.format.underscore}_compliance_check"
end
-
+
def compliance_icon( compliance_check)
return nil unless compliance_check.compliance_check_validation_report
compliance_check.compliance_check_validation_report.tap do |cct|
@@ -33,19 +33,24 @@ module ComplianceChecksHelper
("<i class='fa fa-times status_" + compliance_check_result_status + "_" + compliance_check_result_severity + "'></i>").html_safe
end
end
-
+
def test_definition (compliance_check_result_code)
Rails.application.config.validation_spec + I18n.locale.to_s + "/" + compliance_check_result_code +".html"
end
-
+
def object_url (referential_id, error)
location = "/referentials/" + referential_id.to_s
object_path = error[:source].object_path
if object_path.first[:type] == "vehicle_journey"
object_path.delete_at 1
end
- object_path.reverse.each { |sub_path| location = location + "/" + sub_path[:type].to_s.pluralize + "/" + sub_path[:id].to_s }
- return location
+
+ types, identifiers = object_path.reverse.map { |resource| [ resource[:type], resource[:id] ] }.transpose
+
+ method_name = (['referential'] + types + ['path']).join('_')
+ identifiers.unshift referential_id
+
+ return send method_name, *identifiers
end
def object_labels_hash (error)
@@ -71,7 +76,7 @@ module ComplianceChecksHelper
object_labels_hash[:line_number] = error[:source].file.line_number if error[:source].file.line_number.present?
object_labels_hash[:column_number] = error[:source].file.column_number if error[:source].file.column_number.present?
end
-
+
if error[:target].present?
error[:target].each_with_index do |target, index|
object_labels_hash["target_#{index}_objectid".to_sym] = target[:objectid] if target[:objectid]
@@ -86,6 +91,6 @@ module ComplianceChecksHelper
end
return object_labels_hash
end
-
-
+
+
end
diff --git a/app/helpers/job_status_icon_helper.rb b/app/helpers/job_status_icon_helper.rb
index 9b8e485db..697b4d10c 100644
--- a/app/helpers/job_status_icon_helper.rb
+++ b/app/helpers/job_status_icon_helper.rb
@@ -5,16 +5,16 @@ module JobStatusIconHelper
name = object.name
object_name = object.class.model_name.human.capitalize
- title = ""
+ title = ''
if %w{ aborted canceled }.include?(status)
- title += "<span class='name aborted'><i class='fa fa-times'></i>"
+ title += '<span class="name aborted"><i class="fa fa-times"></i>'
elsif %w{ started scheduled }.include?(status)
- title += "<span class='name processed'><i class='fa fa-spinner fa-spin'></i>"
- elsif %w{terminated}.include?(status)
- title += "<span class='name terminated'><i class='fa fa-check'></i>"
+ title += "<span class=\"name processed progress\" title=\"#{I18n.t('job_status.title.processed')}\"><i class=\"fa fa-clock-o\"></i>"
+ elsif %w{ terminated }.include?(status)
+ title += '<span class="name terminated"><i class="fa fa-check"></i>'
end
- title += "#{object_name} #{truncate(name, :length => 20)}</span>"
+ title += "#{object_name} #{truncate(name, length: 20)}</span>"
title.html_safe
end
@@ -23,8 +23,7 @@ module JobStatusIconHelper
name = object.name
object_name = object.class.model_name.human.capitalize
- title = "#{object_name} #{truncate(name, :length => 20)}"
- title.html_safe
+ "#{object_name} #{truncate(name, length: 20)}".html_safe
end
end
diff --git a/app/helpers/route_section_selectors_helper.rb b/app/helpers/route_section_selectors_helper.rb
new file mode 100644
index 000000000..1be30066b
--- /dev/null
+++ b/app/helpers/route_section_selectors_helper.rb
@@ -0,0 +1,23 @@
+module RouteSectionSelectorsHelper
+
+ def link_to_edit_route_section(route_section)
+ classes = [ 'edit-route-section' ]
+ link ='#'
+
+ if route_section.present?
+ return_to = edit_referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern)
+ link = edit_referential_route_section_path(@referential, route_section, return_to: return_to)
+ else
+ classes << 'disabled'
+ end
+
+ link_to "Edit", link, class: classes, title: t('route_sections_selectors.edit.route_section.edit')
+ end
+
+ def link_to_create_route_section(departure, arrival)
+ return_to = edit_referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern)
+ link_to t('route_sections_selectors.edit.route_section.new'),
+ create_to_edit_referential_route_sections_path(@referential, route_section: {departure_id:departure.id, arrival_id: arrival.id}, return_to: return_to)
+ end
+
+end
diff --git a/app/helpers/timebands_helper.rb b/app/helpers/timebands_helper.rb
new file mode 100644
index 000000000..51251e46f
--- /dev/null
+++ b/app/helpers/timebands_helper.rb
@@ -0,0 +1,2 @@
+module TimebandsHelper
+end
diff --git a/app/helpers/vehicle_journey_frequencies_helper.rb b/app/helpers/vehicle_journey_frequencies_helper.rb
new file mode 100644
index 000000000..28cdc7d21
--- /dev/null
+++ b/app/helpers/vehicle_journey_frequencies_helper.rb
@@ -0,0 +1,14 @@
+module VehicleJourneyFrequenciesHelper
+ def journey_frequency_percent(journey_frequency)
+ base = 100.0 / 2359.0
+ left = base * journey_frequency.first_departure_time.strftime("%H%M").to_i
+ right = base * journey_frequency.last_departure_time.strftime("%H%M").to_i
+ width = (right < left ? 100 - left : right - left)
+ [left.round(2), width.round(2)]
+ end
+
+ def exist_vehicle_journey_frequencies?(route, journey_pattern=nil)
+ where = journey_pattern ? { journey_pattern: journey_pattern } : nil
+ route.vehicle_journey_frequencies.where(where).count > 0
+ end
+end
diff --git a/app/helpers/vehicle_journeys_helper.rb b/app/helpers/vehicle_journeys_helper.rb
index 95741f441..e70f2954b 100644
--- a/app/helpers/vehicle_journeys_helper.rb
+++ b/app/helpers/vehicle_journeys_helper.rb
@@ -16,18 +16,29 @@ module VehicleJourneysHelper
return "missing" if (is_present && is_present.departure_time.nil?)
end
- def vehicle_departure(vehicle)
- first_vjas = vehicle.vehicle_journey_at_stops.first
- return "" unless first_vjas.departure_time
- l(first_vjas.departure_time, :format => :hour).gsub( / /, ' ')
+ def vehicle_departure(vehicle, departure_time=nil)
+ unless departure_time
+ first_vjas = vehicle.vehicle_journey_at_stops.first
+ return '' unless first_vjas.departure_time
+ departure_time = first_vjas.departure_time
+ end
+ l(departure_time, :format => :hour).gsub( / /, ' ')
end
- def vehicle_title( vehicle)
- return t('vehicle_journeys.vehicle_journey.title_stopless', :name => vehicle_name( vehicle)) if vehicle.vehicle_journey_at_stops.empty?
+ def vehicle_title(vehicle, journey_frequency=nil)
+ return t("vehicle_journeys.vehicle_journey#{'_frequency' if vehicle.frequency?}.title_stopless", :name => vehicle_name( vehicle)) if vehicle.vehicle_journey_at_stops.empty?
first_vjas = vehicle.vehicle_journey_at_stops.first
- t('vehicle_journeys.vehicle_journey.title',
- :stop => first_vjas.stop_point.stop_area.name,
- :time => vehicle_departure(vehicle))
+ if vehicle.frequency? && journey_frequency
+ t("vehicle_journeys.vehicle_journey_frequency.title_frequency",
+ :interval => l(journey_frequency.scheduled_headway_interval, format: :hour),
+ :stop => first_vjas.stop_point.stop_area.name,
+ :time_first => vehicle_departure(nil, journey_frequency.first_departure_time),
+ :time_last => vehicle_departure(nil, journey_frequency.last_departure_time))
+ else
+ t("vehicle_journeys.vehicle_journey#{'_frequency' if vehicle.frequency?}.title",
+ :stop => first_vjas.stop_point.stop_area.name,
+ :time => vehicle_departure(vehicle, (journey_frequency ? journey_frequency.first_departure_time : nil )))
+ end
end
def edit_vehicle_title( vehicle)
@@ -38,6 +49,10 @@ module VehicleJourneysHelper
:stop => first_vjas.stop_point.stop_area.name,
:time => vehicle_departure(vehicle))
end
+
+ def exist_vehicle_journeys?(route)
+ route.vehicle_journeys.count > 0
+ end
end
diff --git a/app/inputs/search_timeband_input.rb b/app/inputs/search_timeband_input.rb
new file mode 100644
index 000000000..bad262ef2
--- /dev/null
+++ b/app/inputs/search_timeband_input.rb
@@ -0,0 +1,44 @@
+class SearchTimebandInput < Formtastic::Inputs::SearchInput
+
+ def search
+ if options[:json]
+ template.content_tag( :script,
+ ("$(document).ready(function() {
+ var timeband_formatter = function(item){
+ return '<li>' + item.name + '</li>';
+ };
+ $('##{dom_id}').tokenInput('#{options[:json]}', {
+ zindex: 1061,
+ crossDomain: false,
+ tokenLimit: 1,
+ minChars: 2,
+ propertyToSearch: 'name',
+ preventDuplicates: true,
+ hintText: '#{options[:hint_text]}',
+ noResultsText: '#{options[:no_result_text]}',
+ searchingText: '#{options[:searching_text]}',
+ resultsFormatter: timeband_formatter,
+ tokenFormatter: timeband_formatter,
+ });
+ });").html_safe)
+ end
+ end
+
+ def to_html
+ input_wrapping do
+ label_html <<
+ builder.search_field(method, input_html_options) <<
+ search
+ end
+ end
+
+ def input_html_options
+ super.merge({
+ required: nil,
+ autofocus: nil,
+ class: 'token-input',
+ :'data-model-name' => object.class.model_name.human
+ })
+ end
+
+end
diff --git a/app/maps/access_point_map.rb b/app/maps/access_point_map.rb
index 0103d9edb..3f0013738 100644
--- a/app/maps/access_point_map.rb
+++ b/app/maps/access_point_map.rb
@@ -21,7 +21,7 @@ class AccessPointMap < ApplicationMap
# TODO virer ce code inline
page << <<EOF
edit_access_point_layer.events.on({
- 'afterfeaturemodified': function(event) {
+ 'featuremodified': function(event) {
geometry = event.feature.geometry.clone().transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
$('#access_point_coordinates').val(geometry.y.toString()+ ","+ geometry.x.toString());
diff --git a/app/maps/application_map.rb b/app/maps/application_map.rb
index f6765dc2d..19b9038ec 100644
--- a/app/maps/application_map.rb
+++ b/app/maps/application_map.rb
@@ -73,7 +73,8 @@ class ApplicationMap
def to_html(options = {})
if not respond_to?(:ready?) or ready?
- "<div id=\"#{id}\" class=\"#{default_class}\"></div> #{map.to_html(options)}".html_safe
+ expand = options[:no_fullscreen] ? '' : "<button type=\"button\" data-ce-id=\"#{id}\" data-ce-action=\"map-fullscreen\" class=\"ce-MapExpandBlock\"><i class=\"fa fa-expand\"></i></button>"
+ "<div id=\"#{id}\" class=\"#{default_class}\">#{expand}</div>#{map.to_html(options)}".html_safe
end
end
@@ -136,10 +137,13 @@ class ApplicationMap
var feature = e.feature ;
if (feature.attributes.inactive != undefined)
return;
+ var stop_area_type_label = '';
+ if (feature.attributes.stop_area_type_label != undefined)
+ stop_area_type_label = feature.attributes.stop_area_type_label;
var popup = new OpenLayers.Popup.Anchored('chicken',
new OpenLayers.LonLat(feature.geometry.x, feature.geometry.y),
null,
- \"<div class='popup_hover'><p><b>\" + feature.attributes.name +\"</b><p>\" + feature.attributes.stop_area_type_label + \"</div> \", null, false, null);
+ \"<div class='popup_hover'><p><b>\" + feature.attributes.name +\"</b></p>\" + stop_area_type_label + \"</div> \", null, false, null);
popup.autoSize = true;
popup.displayClass = 'popup_hover';
diff --git a/app/maps/design/journey_pattern_style_map.rb b/app/maps/design/journey_pattern_style_map.rb
index b5d9ec7bc..b5323d6ae 100644
--- a/app/maps/design/journey_pattern_style_map.rb
+++ b/app/maps/design/journey_pattern_style_map.rb
@@ -2,46 +2,49 @@ class Design::JourneyPatternStyleMap < Design::GenericStyleMap
attr_accessor :style
def initialize(helpers, options = {})
- @helpers= helpers
+ @helpers = helpers
@style = options[:style].present? ? default_style.merge(options[:style]) : default_style
end
def select_style
- default_style.merge :externalGraphic => @helpers.assets_path_patch( "map/stop_area_hover.png")
+ default_style.merge externalGraphic: @helpers.assets_path_patch( "map/stop_area_hover.png")
end
+
def default_style
{
- :label => "${label}",
- :fontColor => "black",
- :fontSize => "11px",
- :fontWeight => "bold",
- :labelAlign => "ct",
- :labelXOffset => 0,
- :labelYOffset => -15,
- :strokeColor => "#000000",
- :strokeOpacity => 1,
- :strokeWidth => 3,
- :strokeLineCap => "round",
- :strokeDashstyle => "solid",
- :externalGraphic => @helpers.assets_path_patch( "map/${positionType}.png"),
- :graphicWidth => 12,
- :graphicHeight => 12,
- :graphicOpacity => 1,
- :graphicXOffset => -6,
- :graphicYOffset => -6,
- :display => true
+ label: "${label}",
+ fontColor: "black",
+ fontSize: "14px",
+ fontWeight: "bold",
+ labelAlign: "ct",
+ labelXOffset: 0,
+ labelYOffset: -15,
+ strokeColor: "#000000",
+ strokeOpacity: 1,
+ strokeWidth: 3,
+ strokeLineCap: "round",
+ strokeDashstyle: "solid",
+ externalGraphic: @helpers.assets_path_patch( "map/${positionType}.png"),
+ graphicWidth: 12,
+ graphicHeight: 12,
+ graphicOpacity: 1,
+ graphicXOffset: -6,
+ graphicYOffset: -6,
+ display: true
}
end
def context
- context = {
- :label => :" function(feature) {if(feature.layer.map.getZoom() > 13) { return feature.attributes.name;} else {return '';}} ",
- :positionType => :" function(feature) { if (feature.attributes.iconCode != undefined) {return feature.attributes.iconCode;} else { return '';} } "
+ {
+ label: :" function(feature) {if(feature.layer.map.getZoom() > 13) { return feature.attributes.name;} else {return '';}} ",
+ positionType: :" function(feature) { if (feature.attributes.iconCode != undefined) {return feature.attributes.iconCode;} else { return '';} } "
}
end
def style_map
- OpenLayers::StyleMap.new(:default => OpenLayers::Style.new(style, { :context => context}), :select => OpenLayers::Style.new(style.merge( select_style), { :context => context}))
+ OpenLayers::StyleMap.new(
+ default: OpenLayers::Style.new(style, { context: context}),
+ select: OpenLayers::Style.new(style.merge( select_style), { context: context}))
end
end
diff --git a/app/maps/design/route_section_selector_style_map.rb b/app/maps/design/route_section_selector_style_map.rb
new file mode 100644
index 000000000..12f192ec8
--- /dev/null
+++ b/app/maps/design/route_section_selector_style_map.rb
@@ -0,0 +1,73 @@
+class Design::RouteSectionSelectorStyleMap < Design::GenericStyleMap
+ attr_accessor :style
+
+ def initialize(helpers, options = {})
+ @helpers = helpers
+ @style = options[:style].present? ? default_style.merge(options[:style]) : default_style
+ end
+
+ def select_style
+ {
+ fillColor: "blue",
+ graphicName: "square",
+ rotation: 90,
+ strokeColor: "#00dd00",
+ pointRadius: 15,
+ graphicZIndex: 100
+ }
+ end
+
+ def highlight_style
+ {
+ fillColor: "orange",
+ graphicName: "square",
+ rotation: 90,
+ strokeColor: "#dd0000",
+ pointRadius: 15,
+ graphicZIndex: 200
+ }
+ end
+
+ def default_style
+ {
+ label: "${label}",
+ fontColor: "black",
+ fontSize: "11px",
+ fontWeight: "bold",
+ labelAlign: "ct",
+ labelXOffset: 0,
+ labelYOffset: -15,
+ strokeColor: "#0000dd",
+ strokeOpacity: 1,
+ strokeWidth: 3,
+ strokeLineCap: "round",
+ strokeDashstyle: "solid",
+ externalGraphic: @helpers.assets_path_patch( "map/${positionType}.png"),
+ graphicWidth: 12,
+ graphicHeight: 12,
+ graphicOpacity: 1,
+ graphicXOffset: -6,
+ graphicYOffset: -6,
+ display: true,
+ fillColor: "red",
+ graphicName: "square",
+ rotation: 90,
+ graphicZIndex: 10
+ }
+ end
+
+ def context
+ {
+ label: :" function(feature) {if(feature.layer.map.getZoom() > 13) { return feature.attributes.name;} else {return '';}} ",
+ positionType: :" function(feature) { if (feature.attributes.iconCode != undefined) {return feature.attributes.iconCode;} else { return '';} } "
+ }
+ end
+
+ def style_map
+ OpenLayers::StyleMap.new(
+ default: OpenLayers::Style.new(style, { context: context}),
+ select: OpenLayers::Style.new(style.merge(select_style), { context: context }),
+ highlight: OpenLayers::Style.new(style.merge( highlight_style), { context: context }))
+ end
+
+end
diff --git a/app/maps/design/route_section_style_map.rb b/app/maps/design/route_section_style_map.rb
new file mode 100644
index 000000000..dbd292412
--- /dev/null
+++ b/app/maps/design/route_section_style_map.rb
@@ -0,0 +1,66 @@
+class Design::RouteSectionStyleMap < Design::GenericStyleMap
+ attr_accessor :style
+
+ def initialize(helpers, options = {})
+ @helpers= helpers
+ @style = options[:style].present? ? default_style.merge(options[:style]) : default_style
+ end
+
+ def select_style
+ {
+ fillColor:"blue",
+ graphicName:"circle",
+ rotation:90,
+ :strokeColor => "red",
+ pointerEvents: "visiblePainted"
+ }
+ end
+
+ def highlight_style
+ {
+ fillColor:"lightblue",
+ graphicName:"circle",
+ rotation:90,
+ :strokeColor => "#dd0000"
+ }
+ end
+
+ def default_style
+
+ {
+ :fontColor => "black",
+ :fontSize => "11px",
+ :fontWeight => "bold",
+ :labelAlign => "cm",
+ :labelXOffset => 0,
+ :labelYOffset => -15,
+ :strokeColor => "green",
+ :strokeOpacity => 1,
+ :strokeWidth => 4,
+ :strokeLineCap => "round",
+ :strokeLineJoin => "round",
+ :strokeDashstyle => "solid",
+ :lineCap => "round",
+ :lineJoin => "round",
+ :dashstyle => "solid",
+ :graphicWidth => 12,
+ :graphicHeight => 12,
+ :graphicOpacity => 1,
+ :graphicXOffset => -6,
+ :graphicYOffset => -6,
+ :display => true,
+ fillOpacity: 0.8,
+ fillColor: "#ffffff",
+ graphicName: "circle",
+ pointRadius: 7,
+ pointerEvents: "visiblePainted",
+ rotation: 90
+ }
+
+ end
+
+ def style_map
+ OpenLayers::StyleMap.new(:default => OpenLayers::Style.new(style), :select => OpenLayers::Style.new(style.merge( select_style)), :highlight => OpenLayers::Style.new(style.merge( highlight_style)))
+ end
+
+end
diff --git a/app/maps/journey_pattern_map.rb b/app/maps/journey_pattern_map.rb
index e5eaa7f6b..9a0da5743 100644
--- a/app/maps/journey_pattern_map.rb
+++ b/app/maps/journey_pattern_map.rb
@@ -8,14 +8,12 @@ class JourneyPatternMap < ApplicationMap
end
def customize_map(map, page)
- layer = kml_layer([journey_pattern.referential, journey_pattern.route.line, journey_pattern.route, journey_pattern], :styleMap => Design::JourneyPatternStyleMap.new(helpers).style_map)
- page.assign "journeyPatternLayer", layer
+ layer = kml_layer([journey_pattern.referential, journey_pattern.route.line, journey_pattern.route, journey_pattern], { setLayerIndex: 999, styleMap: Design::JourneyPatternStyleMap.new(helpers).style_map, rendererOptions: { zIndexing: true } })
+ page.assign 'journeyPatternLayer', layer
+ page.assign 'selectFeature', OpenLayers::Control::SelectFeature.new(:journeyPatternLayer)
- selectFeature = OpenLayers::Control::SelectFeature.new( :journeyPatternLayer)
- page.assign "selectFeature", selectFeature
-
- page << map.add_layer( :journeyPatternLayer)
- page << map.add_control( hover_control_display_name(:journeyPatternLayer) )
+ page << map.add_layer(:journeyPatternLayer)
+ page << map.add_control(hover_control_display_name(:journeyPatternLayer))
page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
end
diff --git a/app/maps/route_map.rb b/app/maps/route_map.rb
index 5acb1ad76..bdd6c4a56 100644
--- a/app/maps/route_map.rb
+++ b/app/maps/route_map.rb
@@ -8,7 +8,7 @@ class RouteMap < ApplicationMap
end
def customize_map(map, page)
- layer = kml_layer([route.referential, route.line, route], :styleMap => Design::RouteStyleMap.new(helpers).style_map)
+ layer = kml_layer([route.referential, route.line, route], :styleMap => Design::RouteStyleMap.new(helpers, {context: context = {label: ""}}).style_map)
page.assign "routeLayer", layer
selectFeature = OpenLayers::Control::SelectFeature.new( :routeLayer)
diff --git a/app/maps/route_section_map.rb b/app/maps/route_section_map.rb
new file mode 100644
index 000000000..de4d5e746
--- /dev/null
+++ b/app/maps/route_section_map.rb
@@ -0,0 +1,66 @@
+class RouteSectionMap < ApplicationMap
+
+ attr_reader :route_section
+
+ attr_accessor :editable
+ alias_method :editable?, :editable
+
+ def initialize(route_section, editable = false)
+ @route_section = route_section
+ @editable = editable
+ end
+
+ def customize_map(map, page)
+ # layers order seems to matter for ModifyFeature control
+ route_section.stop_areas.each do |stop_area|
+ layer = "stop_area_#{stop_area.id}".to_sym
+ page.assign layer.to_s, kml_layer(stop_area, :styleMap => Design::StopAreasStyleMap.new(helpers).style_map)
+ page << map.add_layer(layer)
+ page << map.add_control( hover_control_display_name(layer) )
+ end
+
+ geometry_options = {}.tap do |options|
+ options[:mode] = :editable if editable?
+ end
+ geometry_uneditable_kml_layer = kml_layer(route_section, :styleMap => Design::RouteSectionSelectorStyleMap.new(helpers).style_map)
+ page << map.add_layer(geometry_uneditable_kml_layer)
+
+ if route_section.input_geometry
+ geometry_editable_layer = kml_layer(route_section, geometry_options, {}) # , :styleMap => Design::LineStyleMap.new(style: nil).style_map)
+ else
+ points = route_section.stop_areas.map{|point| OpenLayers::Geometry::Point.new(point.longitude, point.latitude).transform("EPSG:4326", "EPSG:900913")}
+ geometry_editable_layer = OpenLayers::Layer::Vector.new("user_geometry", {:projection => projection("EPSG:4326"), :styleMap => Design::RouteSectionStyleMap.new(helpers).style_map})
+ geometry_editable_features = OpenLayers::Feature::Vector.new(OpenLayers::Geometry::LineString.new(points))
+ page.assign :geometry_editable_features, geometry_editable_features
+ end
+
+ if editable
+ page.assign :user_geometry, geometry_editable_layer
+
+ page << "user_geometry.addFeatures([geometry_editable_features])" if geometry_editable_features
+
+ page << map.add_layer(:user_geometry)
+
+ page.assign :modify_feature, OpenLayers::Control::ModifyFeature.new(:user_geometry, autoActivate: true)
+ page << map.add_control( :modify_feature )
+ else
+ page << map.add_layer(geometry_editable_layer)
+ end
+
+ page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
+ end
+
+ def bounds
+ @bounds ||=
+ if route_section.geometry.present?
+ route_section.geometry.bounds
+ elsif route_section.stop_areas.present?
+ GeoRuby::SimpleFeatures::Point.bounds route_section.stop_areas.collect(&:geometry)
+ end
+ end
+
+ def ready?
+ bounds.present?
+ end
+
+end
diff --git a/app/maps/route_section_selector_map.rb b/app/maps/route_section_selector_map.rb
new file mode 100644
index 000000000..7287c4d8a
--- /dev/null
+++ b/app/maps/route_section_selector_map.rb
@@ -0,0 +1,116 @@
+class RouteSectionSelectorMap < ApplicationMap
+
+ attr_reader :route_section_selector, :style
+
+ def initialize(route_section_selector, style = nil)
+ @route_section_selector = route_section_selector
+ @style = nil
+ end
+
+ def customize_map(map, page)
+ layer = kml_layer([route_section_selector.itinerary.referential, route_section_selector.itinerary.route.line, route_section_selector.itinerary.route, route_section_selector.itinerary],
+ { rendererOptions: { zIndexing: true }, styleMap: Design::JourneyPatternStyleMap.new(helpers).style_map })
+ page.assign 'journeyPatternLayer', layer
+
+ page << map.add_layer(:journeyPatternLayer)
+ page << map.add_control(hover_control_display_name(:journeyPatternLayer))
+
+ route_section_geometry = OpenLayers::Layer::Vector.new('Route Section Geometry',
+ { projection: projection('EPSG:900913'),
+ rendererOptions: { zIndexing: true },
+ styleMap: Design::RouteSectionSelectorStyleMap.new(helpers).style_map})
+
+ route_section_layer_points = []
+ route_section_selector.sections.reject{|s| s.candidates.length==0}.each do |section|
+ section.candidates.each do |candidate|
+ geometry = candidate.processed_geometry
+ route_section_layer_points << ["#{candidate.id}"] + clean_route_section_line(geometry)
+ end
+ end
+
+ page.assign :route_section_layer_points, route_section_layer_points
+ page << <<EOF
+ var route_section_layers;
+ route_section_layers = route_section_layer_points.map(function(elt, index) {
+ var route_section_id = elt[0];
+ elt.splice(0, 1);
+ var points = elt.map( function(e,i) {
+ return OpenLayers.Projection.transform(new OpenLayers.Geometry.Point(e[0], e[1]), "EPSG:4326", "EPSG:900913" );
+ })
+ return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), {id: route_section_id, name: ""});
+ })
+EOF
+ page.assign :route_section_geometry, route_section_geometry
+ page << 'route_section_geometry.addFeatures(route_section_layers)'
+ page << map.add_layer(:route_section_geometry)
+
+ page << <<EOF
+ function selected(feature) {
+ RouteSectionMap.onSelectedFeature(feature);
+ }
+ function unselected(feature) {
+ RouteSectionMap.onUnselectedFeature(feature);
+ }
+
+ highlightControl = new OpenLayers.Control.SelectFeature([route_section_geometry],
+ {
+ clickout: true,
+ toggle: false,
+ multiple:false,
+ hover:true,
+ highlightOnly:true,
+ eventListeners:{
+ featurehighlighted: function (event) {
+ event.feature.layer.drawFeature(
+ event.feature,
+ 'highlight'
+ );
+ },
+ featureunhighlighted: function (event) {
+ event.feature.layer.drawFeature(
+ event.feature,
+ 'default'
+ );
+ }
+ }
+ }
+ );
+ selectControl = new OpenLayers.Control.SelectFeature([route_section_geometry],
+ {
+ onSelect:selected,
+ onUnselect:unselected
+ }
+ );
+ map.addControl(highlightControl);
+ map.addControl(selectControl);
+ highlightControl.activate();
+ selectControl.activate();
+EOF
+
+ #page.assign :select_feature, OpenLayers::Control::SelectFeature.new(:route_section_geometry, {onSelect: selected, onUnselect: unselected})
+ #page << map.add_control( :select_feature )
+
+
+ page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds
+
+ end
+
+ def clean_route_section_line(line)
+ point_array = line.to_s.scan(/-?\d+[.]\d+\s-?\d+[.]\d+/)
+ point_array.map do |point|
+ point = point.scan(/-?\d+[.]\d+/)
+ lat = point[0].to_f
+ lng = point[1].to_f
+ [lat, lng]
+ end
+
+ end
+
+ def ready?
+ bounds.present?
+ end
+
+ def bounds
+ @bounds ||= GeoRuby::SimpleFeatures::Point.bounds(route_section_selector.itinerary.route.stop_areas.collect(&:geometry).compact)
+ end
+end
diff --git a/app/maps/stop_area_map.rb b/app/maps/stop_area_map.rb
index 93ec9ecdb..8518b0558 100644
--- a/app/maps/stop_area_map.rb
+++ b/app/maps/stop_area_map.rb
@@ -26,7 +26,6 @@ class StopAreaMap < ApplicationMap
if stop_area.new_record?
page << <<EOF
var createStyleMap = function() {
- var defProp = {strokeColor: "red"};
var defProp = {strokeColor: "black", strokeOpacity: 1, strokeWidth: 2, fillColor: "white", fillOpacity: 1};
var defStyle = OpenLayers.Util.applyDefaults(defProp, OpenLayers.Feature.Vector.style["default"]);
return new OpenLayers.StyleMap({'default': defStyle});
@@ -61,7 +60,7 @@ EOF
for (var x in edit_stop_area_layer.features) {
bounds.extend( edit_stop_area_layer.features[x].geometry.getBounds());
}
- map.zoomToExtent(bounds,true);
+ map.zoomToExtent(bounds.scale(2), true);
};
var transformedGeometry = function( geometry, origin, target ) {
return geometry.clone().transform( new OpenLayers.Projection( origin ), new OpenLayers.Projection( target ));
diff --git a/app/models/compliance_check_export.rb b/app/models/compliance_check_export.rb
index 5f0e26890..95abb3b27 100644
--- a/app/models/compliance_check_export.rb
+++ b/app/models/compliance_check_export.rb
@@ -21,12 +21,14 @@ class ComplianceCheckExport
begin
Dir.mktmpdir("#{I18n.t('compliance_check_results.file.zip_name_prefix')}_#{@referential_id}_#{@compliance_check.id}_", Dir.tmpdir) { |temp_dir|
- File.open(temp_dir + "/#{I18n.t('compliance_check_results.file.summary_errors_file_prefix')}" , "a") do |f|
+ File.open(temp_dir + "/#{I18n.t('compliance_check_results.file.summary_errors_file_prefix')}" , "a:utf-8") do |f|
+ f.write("\ufeff")
f.write(render)
f.flush
end
- File.open(temp_dir + "/#{I18n.t('compliance_check_results.file.detailed_errors_file_prefix')}" , "a") do |f|
+ File.open(temp_dir + "/#{I18n.t('compliance_check_results.file.detailed_errors_file_prefix')}" , "a:utf-8") do |f|
+ f.write("\ufeff")
f.write(detailed_errors_render)
f.flush
end
diff --git a/app/models/export_task.rb b/app/models/export_task.rb
index 3dbda0a70..f02cb914e 100644
--- a/app/models/export_task.rb
+++ b/app/models/export_task.rb
@@ -12,7 +12,7 @@ class ExportTask
enumerize :data_format, in: %w( neptune netex gtfs hub kml )
attr_accessor :referential_id, :user_id, :user_name, :references_type, :data_format, :name, :projection_type, :reference_ids
-
+
validates_presence_of :referential_id
validates_presence_of :user_id
validates_presence_of :user_name
@@ -22,16 +22,17 @@ class ExportTask
validate :period_validation
after_initialize :init_period
-
+
def initialize( params = {} )
run_callbacks :initialize do
params.each {|k,v| send("#{k}=",v)}
end
end
-
+
def period_validation
- st_date = Date.parse(start_date) unless start_date.blank?
- ed_date = Date.parse(end_date) unless end_date.blank?
+ st_date = start_date.is_a?(String) ? Date.parse(start_date) : start_date
+ ed_date = end_date.is_a?(String) ? Date.parse(end_date) : end_date
+
unless Chouette::TimeTable.start_validity_period.nil? || st_date.nil?
tt_st_date = Chouette::TimeTable.start_validity_period
errors.add(:start_date, ExportTask.human_attribute_name("start_date_greater_than" , {:tt_st_date => tt_st_date})) unless tt_st_date <= st_date
@@ -44,7 +45,7 @@ class ExportTask
errors.add(:end_date, ExportTask.human_attribute_name("end_date_less_than", {:tt_ed_date => tt_ed_date})) unless ed_date <= tt_ed_date
end
end
-
+
def init_period
unless Chouette::TimeTable.start_validity_period.nil?
if start_date.nil?
@@ -65,14 +66,12 @@ class ExportTask
end
def save
- puts self.errors.inspect
- puts self.errors.size
if self.valid?
# Call Iev Server
- begin
+ begin
Ievkit.create_job( referential.slug, "exporter", data_format, {
:file1 => params_io,
- } )
+ } )
rescue Exception => exception
raise exception
end
@@ -95,14 +94,26 @@ class ExportTask
h["parameters"] = action_params
end
end
-
+
def action_params
{}
end
-
+
def params_io
file = StringIO.new( params.to_json )
Faraday::UploadIO.new(file, "application/json", "parameters.json")
end
+ def self.optional_attributes(references_type)
+ []
+ end
+
+ def optional_attributes
+ self.class.optional_attributes(references_type.to_s)
+ end
+
+ def optional_attribute?(attribute)
+ optional_attributes.include? attribute.to_sym
+ end
+
end
diff --git a/app/models/gtfs_export.rb b/app/models/gtfs_export.rb
index bef468c32..d0b9fc4f9 100644
--- a/app/models/gtfs_export.rb
+++ b/app/models/gtfs_export.rb
@@ -1,12 +1,12 @@
class GtfsExport < ExportTask
- validates_presence_of :time_zone
+ validates_presence_of :time_zone, unless: Proc.new { |e| e.optional_attribute? :time_zone }
attr_accessor :object_id_prefix, :time_zone
enumerize :references_type, in: %w( network line company group_of_line stop_area )
-
+
after_initialize :init_params
-
+
def init_params
if time_zone.nil?
self.time_zone = "Paris"
@@ -34,6 +34,12 @@ class GtfsExport < ExportTask
}
end
+ def self.optional_attributes(references_type)
+ super.tap do |optional_attributes|
+ optional_attributes.push :time_zone, :start_date, :end_date if references_type == "stop_area"
+ end
+ end
+
def data_format
"gtfs"
end
diff --git a/app/models/neptune_export.rb b/app/models/neptune_export.rb
index 6f26c7583..f25db69c0 100644
--- a/app/models/neptune_export.rb
+++ b/app/models/neptune_export.rb
@@ -13,6 +13,7 @@ class NeptuneExport < ExportTask
"organisation_name" => organisation.name,
"referential_name" => referential.name,
"projection_type" => projection_type || "",
+ "add_extension" => extensions,
"start_date" => start_date,
"end_date" => end_date
}
diff --git a/app/models/referential.rb b/app/models/referential.rb
index d50694c60..7c6de6bf9 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -79,6 +79,10 @@ class Referential < ActiveRecord::Base
Chouette::TimeTable.all
end
+ def timebands
+ Chouette::Timeband.all
+ end
+
def connection_links
Chouette::ConnectionLink.all
end
@@ -87,10 +91,18 @@ class Referential < ActiveRecord::Base
Chouette::VehicleJourney.all
end
+ def vehicle_journey_frequencies
+ Chouette::VehicleJourneyFrequency.all
+ end
+
+ def route_sections
+ Chouette::RouteSection.all
+ end
+
after_initialize :define_default_attributes
def define_default_attributes
- self.time_zone ||= Time.zone.name
+ self.time_zone ||= Time.zone.tzinfo.name
end
def switch
@@ -122,7 +134,7 @@ class Referential < ActiveRecord::Base
[ "Réunion RGR92 - UTM 40S (2975)", 2975 ],
[ "Antilles Françaises RRAF1991 - UTM 20N - IGN (4559)", 4559 ],
[ "Guyane RGFG95 - UTM 22N (2972)", 2972 ],
- [ "Guyane RGFG95 - UTM 21N (2313)", 2313 ]
+ [ "Guyane RGFG95 - UTM 21N (3312)", 3312 ]
]
end
diff --git a/app/models/route_section_search.rb b/app/models/route_section_search.rb
new file mode 100644
index 000000000..a03eb894d
--- /dev/null
+++ b/app/models/route_section_search.rb
@@ -0,0 +1,34 @@
+class RouteSectionSearch
+ include ActiveModel::Conversion
+ extend ActiveModel::Naming
+
+ attr_accessor :departure_name, :arrival_name, :line_id
+ attr_accessor :scope
+
+ def scope
+ scope ||= Chouette::RouteSection
+ end
+
+ def initialize(attributes = {})
+ attributes.each { |k,v| send "#{k}=", v } if attributes
+ end
+
+ def collection()
+ Rails.logger.debug "Search RouteSections with #{inspect}"
+ collection = scope
+
+ [:departure, :arrival].each do |endpoint|
+ endpoint_name = send "#{endpoint}_name"
+ collection = collection.by_endpoint_name(endpoint, endpoint_name) if endpoint_name.present?
+ end
+
+ collection = collection.by_line_id(line_id) if line_id.present?
+
+ collection
+ end
+
+ def persisted?
+ false
+ end
+
+end
diff --git a/app/models/route_sections_selector.rb b/app/models/route_sections_selector.rb
new file mode 100644
index 000000000..0db09ed25
--- /dev/null
+++ b/app/models/route_sections_selector.rb
@@ -0,0 +1,101 @@
+class RouteSectionsSelector
+ extend ActiveModel::Naming
+ include ActiveModel::Conversion
+
+ include ActiveModel::Validations
+
+ attr_reader :itinerary
+
+ def initialize(journey_pattern, attributes = {})
+ @itinerary = journey_pattern
+
+ self.attributes = attributes
+ end
+
+ def attributes=(attributes)
+ attributes.each { |k,v| send "#{k}=", v }
+ end
+
+ def update_attributes(attributes)
+ self.attributes = attributes
+ save
+ end
+
+ delegate :stop_points, to: :itinerary
+
+ def sections
+ @sections ||= create_sections
+ end
+
+ def create_sections
+ [].tap do |sections|
+ stop_points.each_cons(2).each_with_index do |(departure, arrival), index|
+ journey_pattern_section = Chouette::JourneyPatternSection.find_by(journey_pattern: @itinerary, rank: index)
+
+ if journey_pattern_section
+ route_section = journey_pattern_section ? journey_pattern_section.route_section : nil
+ else
+ route_section = Chouette::RouteSection.find_by(departure: departure.stop_area, arrival: arrival.stop_area)
+ end
+
+ sections << Section.new(departure.stop_area, arrival.stop_area, index, route_section)
+ end
+ end
+ end
+
+ def sections_attributes=(attributes)
+ # Process the attributes hash
+ attributes.each do |index, section_attributes|
+ sections[index.to_i].attributes = section_attributes
+ end
+ end
+
+ def save
+ sections.each do |s|
+ Chouette::JourneyPatternSection.update_by_journey_pattern_rank(itinerary.id, s.route_section_id, s.rank)
+ end
+ end
+
+ class Section
+ extend ActiveModel::Translation
+
+ attr_accessor :departure, :arrival, :rank, :route_section_id
+
+ def initialize(departure, arrival, rank, route_section = nil)
+ @departure, @arrival, @rank = departure, arrival, rank
+
+ self.route_section = route_section
+ end
+
+ def route_section=(route_section)
+ @route_section = route_section
+ @route_section_id = route_section.respond_to?(:id) ? route_section.id : nil
+ end
+
+ def route_section
+ @route_section ||= candidates.find_by id: route_section_id
+ end
+
+ def persisted?
+ false
+ end
+
+ def candidates
+ @candidates ||= Chouette::RouteSection.where(departure: departure, arrival: arrival)
+ end
+
+ def create_candidate
+ Chouette::RouteSection.create(departure: departure, arrival: arrival)
+ end
+
+ def attributes=(attributes)
+ attributes.each { |k,v| send "#{k}=", v }
+ end
+
+ def valid?
+ route_section.present?
+ end
+
+ end
+
+end
diff --git a/app/models/rule_parameter_set.rb b/app/models/rule_parameter_set.rb
index dca36a729..1a32bbae2 100644
--- a/app/models/rule_parameter_set.rb
+++ b/app/models/rule_parameter_set.rb
@@ -9,8 +9,6 @@ class RuleParameterSet < ActiveRecord::Base
serialize :parameters, JSON
- #attr_accessible :name, :organisation_id
-
def self.mode_attribute_prefixes
%w( allowed_transport inter_stop_area_distance_min inter_stop_area_distance_max speed_max speed_min inter_stop_duration_variation_max)
end
@@ -31,25 +29,23 @@ class RuleParameterSet < ActiveRecord::Base
end
def self.validable_object_names
- ["network","company","group_of_line",
- "stop_area","access_point","access_link","connection_link",
- "time_table","line","route",
- "journey_pattern","vehicle_journey"]
+ %w( network company group_of_line stop_area access_point access_link connection_link time_table line route
+ journey_pattern vehicle_journey )
end
def self.validable_columns
- {"network" => ['objectid','name','registration_number'],
- "company" => ['objectid','name','registration_number'],
- "group_of_line" => ['objectid','name','registration_number'],
- "stop_area" => ['objectid','name','registration_number','city_name','country_code','zip_code'],
- "access_point" => ['objectid','name','city_name','country_code','zip_code'],
- "access_link" => ['objectid','name','link_distance','default_duration'],
- "connection_link" => ['objectid','name','link_distance','default_duration'],
- "time_table" => ['objectid','comment','version'],
- "line" => ['objectid','name','registration_number','number','published_name'],
- "route" => ['objectid','name','number','published_name'],
- "journey_pattern" => ['objectid','name','registration_number','published_name'],
- "vehicle_journey" => ['objectid','published_journey_name','published_journey_identifier','number'] }
+ { 'network' => ['objectid','name','registration_number'],
+ 'company' => ['objectid','name','registration_number'],
+ 'group_of_line' => ['objectid','name','registration_number'],
+ 'stop_area' => ['objectid','name','registration_number','city_name','country_code','zip_code'],
+ 'access_point' => ['objectid','name','city_name','country_code','zip_code'],
+ 'access_link' => ['objectid','name','link_distance','default_duration'],
+ 'connection_link' => ['objectid','name','link_distance','default_duration'],
+ 'time_table' => ['objectid','comment','version'],
+ 'line' => ['objectid','name','registration_number','number','published_name'],
+ 'route' => ['objectid','name','number','published_name'],
+ 'journey_pattern' => ['objectid','name','registration_number','published_name'],
+ 'vehicle_journey' => ['objectid','published_journey_name','published_journey_identifier','number'] }
end
def self.column_attribute_prefixes
diff --git a/app/models/stop_area_copy.rb b/app/models/stop_area_copy.rb
index 3401b5fde..0fa56ff68 100644
--- a/app/models/stop_area_copy.rb
+++ b/app/models/stop_area_copy.rb
@@ -56,7 +56,7 @@ class StopAreaCopy
{ :name => self.source.name, # TODO: change ninoxe to avoid that !!!
:area_type => self.area_type.camelcase,
:registration_number => nil,
- :parent_id => copy_is_source_child? ? self.source_id : self.copy.parent_id
+ :parent_id => copy_is_source_child? ? self.source_id : nil
}
end
@@ -71,11 +71,18 @@ class StopAreaCopy
if self.valid?
Chouette::StopArea.transaction do
copy.update_attributes copy_modfied_attributes
- unless source_modified_attributes.empty?
- source.update_attributes source_modified_attributes
- end
+ if copy.valid?
+ unless source_modified_attributes.empty?
+ source.update_attributes source_modified_attributes
+ end
+ true
+ else
+ copy.errors.full_messages.each do |m|
+ errors.add :base, m
+ end
+ false
+ end
end
- true
else
false
end
diff --git a/app/models/vehicle_filter.rb b/app/models/vehicle_filter.rb
index 64cc3e75a..13a302dc6 100644
--- a/app/models/vehicle_filter.rb
+++ b/app/models/vehicle_filter.rb
@@ -1,6 +1,7 @@
class VehicleFilter
attr_accessor :route
attr_accessor :q
+ attr_accessor :journey_category_model
def initialize(attributes = {})
attributes.each do |name, value|
@@ -17,9 +18,9 @@ class VehicleFilter
end
def vehicles_passing_time_filtered
if without_any_passing_time?
- route.vehicle_journeys.without_any_passing_time
+ route.send(journey_category_model).without_any_passing_time
else
- route.sorted_vehicle_journeys
+ route.sorted_vehicle_journeys(journey_category_model)
end
end
def vehicle_journeys
diff --git a/app/views/access_links/_form.html.erb b/app/views/access_links/_form.html.erb
index 2ce44542f..d6c0c603e 100644
--- a/app/views/access_links/_form.html.erb
+++ b/app/views/access_links/_form.html.erb
@@ -4,12 +4,12 @@
<%= form.input :stop_area_id , :as => :hidden %>
<%= form.input :link_orientation_type , :as => :hidden%>
<%= form.input :name %>
- <%= form.input :access_link_type, :as => :select, :collection => Chouette::AccessLink.access_link_types, :include_blank => false, :member_label => Proc.new { |type| t("connection_link_types.label.#{type}") } %>
+ <%= form.input :access_link_type, :as => :select, :collection => Chouette::AccessLink.access_link_types, :include_blank => true, :member_label => Proc.new { |type| t("connection_link_types.label.#{type}") } %>
<%= form.input :comment %>
<%= form.input :link_distance %>
- <%= form.input :mobility_restricted_suitability,:as => :boolean %>
- <%= form.input :stairs_availability,:as => :boolean %>
- <%= form.input :lift_availability,:as => :boolean %>
+ <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
+ <%= form.input :stairs_availability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
+ <%= form.input :lift_availability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
<%= form.input :objectid, :required => !@access_link.new_record?, :input_html => { :title => t("formtastic.titles.access_link.objectid")} %>
<%= form.inputs :name => t('access_links.show.durations') do %>
<%= form.input :default_duration, :as => :extended_time_picker, :size => 8, :step => :seconds, :label => @access_link.human_attribute_name("default_duration"), :input_html => { :class => "form-control input-sm timepicker_seconds", :step => 1}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %>
diff --git a/app/views/access_links/show.html.erb b/app/views/access_links/show.html.erb
index 3999b0287..54f89297e 100644
--- a/app/views/access_links/show.html.erb
+++ b/app/views/access_links/show.html.erb
@@ -6,7 +6,11 @@
<div class="summary">
<p>
<label><%= @access_link.human_attribute_name("access_link_type") %>: </label>
- <%= t("connection_link_types.label.#{@access_link.access_link_type}") %>
+ <% if @access_link.access_link_type.present? %>
+ <%= t("connection_link_types.label.#{@access_link.access_link_type}") %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p>
<label><%= @access_link.human_attribute_name("comment") %>: </label>
@@ -39,21 +43,33 @@
</p>
<p>
<label class='duration'><%= @access_link.human_attribute_name("mobility_restricted_traveller_duration") %>: </label>
- <% if (@access_link.mobility_restricted_traveller_duration.present?) %>
+ <% if (!@access_link.mobility_restricted_traveller_duration.nil?) %>
<%= @access_link.mobility_restricted_traveller_duration.strftime('%Hh %Mm %Ss') %>
<% end %>
</p>
<p>
<label><%= @access_link.human_attribute_name("mobility_restricted_suitability") %>: </label>
- <%= t((@access_link.mobility_restricted_suitability == true).to_s) %>
+ <% if (!@access_link.mobility_restricted_suitability.nil?) %>
+ <%= t((@access_link.mobility_restricted_suitability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p>
<label><%= @access_link.human_attribute_name("stairs_availability") %>: </label>
- <%= t((@access_link.stairs_availability == true).to_s) %>
+ <% if (!@access_link.stairs_availability.nil?) %>
+ <%= t((@access_link.stairs_availability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p>
<label><%= @access_link.human_attribute_name("lift_availability") %>: </label>
- <%= t((@access_link.lift_availability == true).to_s) %>
+ <% if (!@access_link.lift_availability.nil?) %>
+ <%= t((@access_link.lift_availability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
</div>
</div>
diff --git a/app/views/access_points/_form.html.erb b/app/views/access_points/_form.html.erb
index adbfd0348..9057bb7bb 100644
--- a/app/views/access_points/_form.html.erb
+++ b/app/views/access_points/_form.html.erb
@@ -1,51 +1,54 @@
<div class="container-fluid">
- <div class="col-md-7">
+ <% if @map %>
+ <%= @map.to_html %>
+ <% end %>
+ <%= semantic_form_for [@referential, @stop_area, @access_point] do |form| %>
+ <%= form.inputs do %>
+ <%= form.input :id, :as => :hidden %>
+ <%= form.input :name %>
+ <%= form.input :access_point_type, :as => :select,
+ :input_html => {:disabled => !@access_point.new_record? },
+ :collection => Chouette::AccessPoint.access_point_types,
+ :include_blank => false,
+ :member_label => Proc.new { |access_point_type| t("access_types.label.#{access_point_type}") } %>
+ <%= form.input :street_name %>
+ <%= form.input :country_code %>
+ <%= form.input :zip_code %>
+ <%= form.input :city_name %>
+ <%= form.input :comment %>
+ <%= form.input :openning_time, :as => :time_picker,
+ :input_html => { :class => "form-control input-sm timepicker_basic"},
+ :wrapper_html => { :class => "input-append bootstrap-timepicker" } %>
+ <%= form.input :closing_time, :as => :time_picker,
+ :input_html => { :class => "form-control input-sm timepicker_basic"},
+ :wrapper_html => { :class => "input-append bootstrap-timepicker" } %>
+ <%= form.input :mobility_restricted_suitability,:as => :boolean %>
+ <%= form.input :stairs_availability,:as => :boolean %>
+ <%= form.input :lift_availability,:as => :boolean %>
+ <%= form.input :objectid, :required => !@access_point.new_record?,
+ :input_html => { :title => t("formtastic.titles.access_point.objectid")} %>
- <%= semantic_form_for [@referential, @stop_area, @access_point] do |form| %>
- <%= form.inputs do %>
- <%= form.input :id, :as => :hidden %>
- <%= form.input :name %>
- <%= form.input :access_point_type, :as => :select, :input_html => { :disabled => !@access_point.new_record? },
- :collection => Chouette::AccessPoint.access_point_types, :include_blank => false, :member_label => Proc.new { |access_point_type| t("access_types.label.#{access_point_type}") } %>
- <%= form.input :street_name %>
- <%= form.input :country_code %>
- <%= form.input :zip_code %>
- <%= form.input :city_name %>
- <%= form.input :comment %>
- <%= form.input :openning_time, :as => :time_picker, :input_html => { :class => "form-control input-sm timepicker_basic"}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %>
- <%= form.input :closing_time, :as => :time_picker, :input_html => { :class => "form-control input-sm timepicker_basic"}, :wrapper_html => { :class => "input-append bootstrap-timepicker" } %>
- <%= form.input :mobility_restricted_suitability,:as => :boolean %>
- <%= form.input :stairs_availability,:as => :boolean %>
- <%= form.input :lift_availability,:as => :boolean %>
- <%= form.input :objectid, :required => !@access_point.new_record?, :input_html => { :title => t("formtastic.titles.access_point.objectid")} %>
-
- <%= form.inputs :name => t('access_points.show.geographic_data') do %>
- <% if ! @referential.projection_type_label.empty? %>
- <div class="panel panel-default">
- <div class="panel-heading"><%= @referential.projection_type_label %></div>
- <div class="panel-body">
- <%= form.input :projection_xy, :input_html => { :title => t("formtastic.titles.access_point.projection_xy")} %>
- </div>
- </div>
- <% end %>
+ <%= form.inputs :name => t('access_points.show.geographic_data') do %>
+ <% if ! @referential.projection_type_label.empty? %>
<div class="panel panel-default">
- <div class="panel-heading">WGS84</div>
+ <div class="panel-heading"><%= @referential.projection_type_label %></div>
<div class="panel-body">
- <%= form.input :coordinates, :input_html => { :title => t("formtastic.titles.access_point.coordinates")} %>
+ <%= form.input :projection_xy, :input_html => { :title => t("formtastic.titles.access_point.projection_xy")} %>
</div>
- </div>
+ </div>
<% end %>
+ <div class="panel panel-default">
+ <div class="panel-heading">WGS84</div>
+ <div class="panel-body">
+ <%= form.input :coordinates, :input_html => { :title => t("formtastic.titles.access_point.coordinates")} %>
+ </div>
+ </div>
+ <% end %>
<% end %>
<%= form.actions do %>
- <%= form.action :submit, :as => :button %>
- <%= form.action :cancel, :as => :link %>
+ <%= form.action :submit, :as => :button %>
+ <%= form.action :cancel, :as => :link %>
<% end %>
- <% end %>
- </div>
- <div class="col-md-5">
- <% if @map %>
- <%= @map.to_html %>
- <% end %>
- </div>
+ <% end %>
</div>
diff --git a/app/views/api_keys/_form.html.erb b/app/views/api_keys/_form.html.erb
index de3f9ad7e..0adff4155 100644
--- a/app/views/api_keys/_form.html.erb
+++ b/app/views/api_keys/_form.html.erb
@@ -2,7 +2,7 @@
<%= form.inputs do %>
<%= form.input :name %>
<% unless @api_key.new_record? %>
- <%= form.input :token, :input_html => { :disabled => true } %>
+ <%= form.input :token, :input_html => { :readonly => true } %>
<% end %>
<% end %>
diff --git a/app/views/api_keys/show.html.erb b/app/views/api_keys/show.html.erb
new file mode 100644
index 000000000..1fb5236b3
--- /dev/null
+++ b/app/views/api_keys/show.html.erb
@@ -0,0 +1,24 @@
+<%= title_tag t('api_keys.show.title') %>
+
+<div class="api_keys_show">
+
+ <div class="summary">
+ <p>
+ <label><%= @api_key.class.human_attribute_name("name") %>: </label>
+ <%= @api_key.name %>
+ </p>
+ <p>
+ <label><%= @api_key.class.human_attribute_name("token") %>: </label>
+ <%= @api_key.token %>
+ </p>
+ </div>
+</div>
+
+<% content_for :sidebar do %>
+<ul class="actions">
+ <li><%= link_to t('api_keys.actions.new'), new_referential_api_key_path(@referential), :class => "add" %></li>
+ <li><%= link_to t('api_keys.actions.edit'), edit_referential_api_key_path(@referential, @api_key), :class => "edit" %></li>
+ <li><%= link_to t('api_keys.actions.destroy'), referential_api_key_path(@referential, @api_key), :method => :delete, :data => {:confirm => t('api_keys.actions.destroy_confirm')}, :class => "remove" %></li>
+ <br>
+</ul>
+<% end %>
diff --git a/app/views/autocomplete_timebands/index.rabl b/app/views/autocomplete_timebands/index.rabl
new file mode 100644
index 000000000..663b09285
--- /dev/null
+++ b/app/views/autocomplete_timebands/index.rabl
@@ -0,0 +1,8 @@
+collection @timebands
+
+node do |timeband|
+ {
+ id: timeband.id,
+ name: timeband.fullname
+ }
+end
diff --git a/app/views/compliance_checks/_compliance_check_results.erb b/app/views/compliance_checks/_compliance_check_results.erb
index ab8d283eb..28d5a289e 100644
--- a/app/views/compliance_checks/_compliance_check_results.erb
+++ b/app/views/compliance_checks/_compliance_check_results.erb
@@ -1,7 +1,7 @@
<p>
<form class="form-inline">
<div class="form-group">
- <label><%= t("shared.ie_report.html.search") %></label>
+ <label><%= t("shared.ie_report.search") %></label>
<input id="filter" type="text" class="form-control">
</div>
<div class="form-group">
@@ -40,51 +40,57 @@
</tr>
</thead>
<tbody>
- <% compliance_check_validation_report.tests.each_with_index do |test, index| %>
- <tr class='<%= "#{test.result}_#{test.severity}" %>'>
- <td data-value="<%="status-#{test.result}"%>"><%= status_icon( test.result, test.severity ) %> </td>
- <td data-value="<%="severity-#{test.severity}"%>"><%= t("compliance_check_result.severities.#{test.severity}_txt") %></td>
- <td data-value="<%= "#{test.result}_#{test.severity}" %>">
- <%= link_to test.test_id, test_definition(test.test_id), title: ComplianceCheckResult.human_attribute_name(test.test_id), target: "compliance_check" %>
- </td>
- <td>
- <%= ("#{test.error_count || 0} #{ComplianceCheckResult.human_attribute_name(:violation_count)}") if test.errors.present? %>
- </td>
- <td>
- <%= truncate(t("activemodel.attributes.compliance_check_result.#{test.test_id}"), length: 50)%>
- </td>
- <td>
- <p><b><%=t("activemodel.attributes.compliance_check_result.#{test.test_id}")%></b></p>
- <% if test.errors.present? %>
- <% test.errors.first(10).each do |error| %>
- <dl class="inline">
- <dt>
- <% if error["source"].present? %>
- <% if error[:source].object_path.present? %>
- <% if error[:source].label.present? %>
- <%= link_to error[:source].label, object_url(@referential.id, error), target: :_blank %>
- <% else %>
- <%= link_to "#{error[:source].object_path.type} (#{error[:source].object_path.id})", object_url(@referential.id, error), target: :_blank %>
+ <% if compliance_check_validation_report %>
+ <% compliance_check_validation_report.tests.each_with_index do |test, index| %>
+ <tr class='<%= "#{test.result}_#{test.severity}" %>'>
+ <td data-value="<%="status-#{test.result}"%>"><%= status_icon( test.result, test.severity ) %> </td>
+ <td data-value="<%="severity-#{test.severity}"%>"><%= t("compliance_check_result.severities.#{test.severity}_txt") %></td>
+ <td data-value="<%= "#{test.result}_#{test.severity}" %>">
+ <%= link_to test.test_id, test_definition(test.test_id), title: ComplianceCheckResult.human_attribute_name(test.test_id), target: "compliance_check" %>
+ </td>
+ <td>
+ <%= ("#{test.error_count || 0} #{ComplianceCheckResult.human_attribute_name(:violation_count)}") if test.errors.present? %>
+ </td>
+ <td>
+ <%= truncate(t("activemodel.attributes.compliance_check_result.#{test.test_id}"), length: 50)%>
+ </td>
+ <td>
+ <p><b><%=t("activemodel.attributes.compliance_check_result.#{test.test_id}")%></b></p>
+ <% if test.errors.present? %>
+ <% test.errors.first(10).each do |error| %>
+ <dl class="inline">
+ <dt>
+ <% if error["source"].present? %>
+ <% if error[:source].object_path.present? %>
+ <% if error[:source].label.present? %>
+ <%= link_to error[:source].label, object_url(@referential.id, error), target: :_blank %>
+ <% else %>
+ <%= link_to "#{error[:source].object_path.type} (#{error[:source].object_path.id})", object_url(@referential.id, error), target: :_blank %>
+ <% end %>
+ <% end %>
+ <% if error[:source].file.present? %>
+ <%= error[:source].objectid if error[:source].objectid.present? %>
<% end %>
<% end %>
- <% if error[:source].file.present? %>
- <%= error[:source].objectid if error[:source].objectid.present? %>
- <% end %>
+ </dt>
+ <dd><%=t("compliance_check_result.details.detail_#{error[:error_id]}", object_labels_hash(error))%></dd>
+ </dl>
+ <% if error[:source].file.present? %>
+ <p class="file_error">
+ <%= error[:source].file.filename %>
+ <%= ", li: #{error[:source].file.line_number}" if error[:source].file.line_number.present? %>
+ <%= ", co: #{error[:source].file.column_number}" if error[:source].file.column_number.present? %>
+ </p>
<% end %>
- </dt>
- <dd><%=t("compliance_check_result.details.detail_#{error[:error_id]}", object_labels_hash(error))%></dd>
- </dl>
- <% if error[:source].file.present? %>
- <p class="file_error">
- <%= error[:source].file.filename %>
- <%= ", li: #{error[:source].file.line_number}" if error[:source].file.line_number.present? %>
- <%= ", co: #{error[:source].file.column_number}" if error[:source].file.column_number.present? %>
- </p>
<% end %>
<% end %>
- <% end %>
- </td>
- </tr>
+ </td>
+ </tr>
+ <% end %>
+ <% else %>
+ <tr>
+ <td colspan="6"><%= t('compliance_check_results.in_progress') %></td>
+ </tr>
<% end %>
</tbody>
<tfoot class="hide-if-no-paging">
diff --git a/app/views/compliance_checks/report.html.erb b/app/views/compliance_checks/report.html.erb
index 28abd4cbb..7bd0d7a92 100644
--- a/app/views/compliance_checks/report.html.erb
+++ b/app/views/compliance_checks/report.html.erb
@@ -30,7 +30,7 @@
</div>
<% content_for :sidebar do %>
- <% if @compliance_check.compliance_check_validation_report.nok_error.blank? %>
+ <% if @compliance_check.compliance_check_validation_report && @compliance_check.compliance_check_validation_report.nok_error.blank? %>
<div class="row">
<%=font_awesome_classic_tag('fa-thumbs-up fa-5x col-md-3')%>
<p class='col-md-7' id='validation_success'><%=t('.validation_success')%></p>
diff --git a/app/views/compliance_checks/show.html.erb b/app/views/compliance_checks/show.html.erb
index 1a1f842f5..1b656692e 100644
--- a/app/views/compliance_checks/show.html.erb
+++ b/app/views/compliance_checks/show.html.erb
@@ -13,7 +13,7 @@
<div class="links">
<%= link_to font_awesome_classic_tag("fa-external-link") + t("compliance_checks.actions.report"), report_referential_compliance_check_path(@referential, @compliance_check.id) if @compliance_check.compliance_check_validation_report? %>
</div>
- <%= render(partial: "shared/ie_report.html", locals: { job: @compliance_check, type: :validation } ) %>
+ <%= render(partial: "shared/ie_report", locals: { job: @compliance_check, type: :validation, line_items: @line_items } ) %>
</div>
<% content_for :sidebar do %>
diff --git a/app/views/connection_links/_form.erb b/app/views/connection_links/_form.erb
index 52f2a94c8..49ca68aef 100644
--- a/app/views/connection_links/_form.erb
+++ b/app/views/connection_links/_form.erb
@@ -1,12 +1,12 @@
<%= semantic_form_for [@referential, @connection_link] do |form| %>
<%= form.inputs do %>
<%= form.input :name %>
- <%= form.input :connection_link_type, :as => :select, :collection => Chouette::ConnectionLink.connection_link_types, :include_blank => false, :member_label => Proc.new { |type| t("connection_link_types.label.#{type}") } %>
+ <%= form.input :connection_link_type, :as => :select, :collection => Chouette::ConnectionLink.connection_link_types, :include_blank => true, :member_label => Proc.new { |type| t("connection_link_types.label.#{type}") } %>
<%= form.input :comment %>
<%= form.input :link_distance, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.connection_link.link_distance") } %>
- <%= form.input :mobility_restricted_suitability,:as => :boolean %>
- <%= form.input :stairs_availability,:as => :boolean %>
- <%= form.input :lift_availability,:as => :boolean %>
+ <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
+ <%= form.input :stairs_availability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
+ <%= form.input :lift_availability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
<%= form.input :objectid, :required => !@connection_link.new_record?, :input_html => { :title => t("formtastic.titles.connection_link.objectid")} %>
<% end %>
diff --git a/app/views/connection_links/show.html.erb b/app/views/connection_links/show.html.erb
index 0771caac4..e715953fc 100644
--- a/app/views/connection_links/show.html.erb
+++ b/app/views/connection_links/show.html.erb
@@ -23,7 +23,7 @@
<p>
<label><%= @connection_link.human_attribute_name("connection_link_type") %>: </label>
<% if @connection_link.connection_link_type.blank? %>
- <%= t("connection_link_types.label.undefined") %>
+ <%=t("unknown") %>
<% else %>
<%= t("connection_link_types.label.#{@connection_link.connection_link_type}") %>
<% end %>
@@ -65,15 +65,27 @@
</p>
<p>
<label><%= @connection_link.human_attribute_name("mobility_restricted_suitability") %>: </label>
- <%= t((@connection_link.mobility_restricted_suitability == true).to_s) %>
+ <% if (!@connection_link.mobility_restricted_suitability.nil?) %>
+ <%= t((@connection_link.mobility_restricted_suitability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p>
<label><%= @connection_link.human_attribute_name("stairs_availability") %>: </label>
- <%= t((@connection_link.stairs_availability == true).to_s) %>
+ <% if (!@connection_link.stairs_availability.nil?) %>
+ <%= t((@connection_link.stairs_availability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p>
<label><%= @connection_link.human_attribute_name("lift_availability") %>: </label>
- <%= t((@connection_link.lift_availability == true).to_s) %>
+ <% if (!@connection_link.lift_availability.nil?) %>
+ <%= t((@connection_link.lift_availability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
</div>
</div>
diff --git a/app/views/devise/confirmations/new.html.erb b/app/views/devise/confirmations/new.html.erb
index 1e221155c..dae3f3023 100644
--- a/app/views/devise/confirmations/new.html.erb
+++ b/app/views/devise/confirmations/new.html.erb
@@ -1,13 +1,23 @@
-<%= title_tag t('.title') %>
-
-<%= semantic_form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |form| %>
-
- <%= form.input :email %>
-
- <%= form.actions do %>
- <%= form.action :submit, :as => :button, :label => t('.title') %>
- <%= form.action :cancel, :as => :link %>
- <% end %>
-<% end %>
-
-<%= render "links" %>
+<div id="sessions_new" class="row">
+ <%= render 'devise/shared/intro' %>
+ <div class="col-md-4 login">
+ <div class="panel panel-default">
+ <div class="panel-heading"><%= t('.title') %></div>
+ <div class="panel-body">
+ <%= simple_form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :wrapper => "form_without_label", html: { :class => 'form-horizontal user', method: :post } ) do |form| %>
+ <%= form.input :email, :label => false, input_html: { :class => "form-control" } %>
+ <div class="row">
+ <div class="col-md-12">
+ <%= form.button :submit, t('.title'), :class => "btn-primary" %>
+ </div>
+ </div>
+ <div class="row options">
+ <div class="col-md-12 new_password">
+ <%= link_to t('devise.links.sign_in'), new_session_path(resource_name) %>
+ </div>
+ </div>
+ <% end %>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb
index 154ecf1c8..dd3051098 100644
--- a/app/views/devise/registrations/edit.html.erb
+++ b/app/views/devise/registrations/edit.html.erb
@@ -6,7 +6,7 @@
<div class="form-inputs">
<%= f.input :email, required: true, autofocus: true %>
<%= f.input :name, required: true %>
-
+
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<p>Currently waiting confirmation for: <%= resource.unconfirmed_email %></p>
<% end %>
@@ -18,7 +18,6 @@
<div class="form-actions">
<%= f.button :submit %>
+ <%= link_to t("cancel"), :back %>
</div>
<% end %>
-
-
diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb
index 35b874e64..2df4f3d97 100644
--- a/app/views/devise/sessions/new.html.erb
+++ b/app/views/devise/sessions/new.html.erb
@@ -1,13 +1,5 @@
<div id="sessions_new" class="row">
- <div class="col-md-8 product_summary">
- <h2><%= t(".welcome") %></h2>
- <p><%= t(".introduction1") %></p>
- <p><%= t(".introduction2") %></p>
- <ul>
- <li>- <%= t(".introduction_item1") %></li>
- <li>- <%= t(".introduction_item2") %></li>
- </ul>
- </div>
+ <%= render 'devise/shared/intro' %>
<div class="col-md-4 login">
<div class="panel panel-default">
<div class="panel-body">
@@ -29,6 +21,10 @@
</div>
<div class="col-md-6 new_password">
<%= link_to t("devise.links.new_password"), new_password_path(resource_name) %>
+ <% if devise_mapping.confirmable? && controller_name != 'confirmations' %>
+ <br>
+ <%= link_to t("devise.links.new_confirmation"), new_confirmation_path(resource_name) %>
+ <% end %>
</div>
</div>
<% end %>
diff --git a/app/views/devise/shared/_intro.html.erb b/app/views/devise/shared/_intro.html.erb
new file mode 100644
index 000000000..b56559352
--- /dev/null
+++ b/app/views/devise/shared/_intro.html.erb
@@ -0,0 +1,9 @@
+<div class="col-md-8 product_summary">
+ <h2><%= t("devise.sessions.new.welcome") %></h2>
+ <p><%= t("devise.sessions.new.introduction1") %></p>
+ <p><%= t("devise.sessions.new.introduction2") %></p>
+ <ul>
+ <li>- <%= t("devise.sessions.new.introduction_item1") %></li>
+ <li>- <%= t("devise.sessions.new.introduction_item2") %></li>
+ </ul>
+</div>
diff --git a/app/views/export_tasks/_fields_gtfs_export.html.erb b/app/views/export_tasks/_fields_gtfs_export.html.erb
index b5dca732b..7edb02bfa 100644
--- a/app/views/export_tasks/_fields_gtfs_export.html.erb
+++ b/app/views/export_tasks/_fields_gtfs_export.html.erb
@@ -1,2 +1,2 @@
-<%= form.input :time_zone, :as => :time_zone, :input_html => { :title => t("formtastic.titles.export_task.time_zone")} %>
+<%= form.input :time_zone, :as => :time_zone, :input_html => { :value => @referential.time_zone ,:title => t("formtastic.titles.export_task.time_zone")} %>
<%= form.input :object_id_prefix, :input_html => { :value => @referential.prefix ,:title => t("formtastic.titles.export_task.object_id_prefix")} %>
diff --git a/app/views/export_tasks/new.html.erb b/app/views/export_tasks/new.html.erb
index 1cdb4fa79..81180bf3b 100644
--- a/app/views/export_tasks/new.html.erb
+++ b/app/views/export_tasks/new.html.erb
@@ -1,6 +1,6 @@
<%= title_tag t(".title") %>
<ul class="nav nav-pills">
- <% ExportTask.data_formats.each do |format| %>
+ <% ExportTask.data_formats.each do |format| %>
<li role="presentation"><a href="#<%= format %>" class='<%= @export_task.data_format == format ? "#{format} active" : "#{format}" %>' title='<%= t(:"enumerize.data_format_detail.#{format}")%>' data-toggle="tab"><%= t(:"enumerize.data_format.#{format}") %></a></li>
<% end %>
</ul>
@@ -8,23 +8,22 @@
<div class="tab-content">
<% @available_exports.each do |export_task| %>
<%= semantic_form_for [@referential, export_task], :as => :export_task, :url => referential_export_tasks_path(@referential), :namespace => export_task.data_format ,:html => { :id => "#{export_task.data_format}", :class => "tab-pane highlight"} do |form| %>
- <%= form.inputs do %>
+ <%= form.inputs do %>
<%= form.input :user_name, :as => :hidden, :input_html => { :value => current_user.name } %>
<%= form.input :user_id, :as => :hidden, :input_html => { :value => current_user.id } %>
<%= form.input :data_format, :as => :hidden %>
- <%= form.input :referential_id, :as => :hidden, :input_html => { :value => @referential.id } %>
- <%= form.input :name %>
- <%= form.input :references_type, :as => :select, :include_blank => t(".all") %>
+ <%= form.input :referential_id, :as => :hidden, :input_html => { :value => @referential.id } %>
+ <%= form.input :name %>
+ <%= form.input :references_type, as: :select, include_blank: t(".all"), collection: export_task.class.references_type.options.map { |o| o << {data:{"hidden-attributes" => export_task.class.optional_attributes(o.second).join(',') }} } %>
<% export_task.class.references_types.each do |type| %>
- <%= form.input :reference_ids, :as => :reference_ids, :json => references_referential_export_tasks_path(@referential, :format => :json) + "?filter=#{type}", :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :id => "#{export_task.data_format}_#{type}_reference_ids", :input_html => { :id => "#{export_task.data_format}_#{type}_reference_ids" }, :wrapper_html => { :style => "display:none;", :id => "#{export_task.data_format}_#{type}", :"data-type" => "#{type}" } %>
- <% end %>
- <% end %>
+ <%= form.input :reference_ids, :as => :reference_ids, :json => references_referential_export_tasks_path(@referential, :format => :json) + "?filter=#{type}", :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :id => "#{export_task.data_format}_#{type}_reference_ids", :input_html => { :id => "#{export_task.data_format}_#{type}_reference_ids" }, :wrapper_html => { style: "display:none;", "data-type" => type.to_s } %>
+ <% end %>
+ <% end %>
- <%= form.input :start_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.start_date")} %>
- <%= form.input :end_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.end_date")} %>
+ <%= form.input :start_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.start_date")} %>
+ <%= form.input :end_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.end_date")} %>
-
- <%= render partial: "fields_#{export_task.data_format}_export", :locals => { :form => form } %>
+ <%= render partial: "fields_#{export_task.data_format}_export", :locals => { :form => form } %>
<%= form.actions do %>
<%= form.action :submit, :as => :button , :label => t( 'formtastic.export' ) %>
@@ -36,4 +35,3 @@
</div>
<%= javascript_include_tag new_referential_export_task_path(@referential, :format => :js) %>
-
diff --git a/app/views/exports/show.html.erb b/app/views/exports/show.html.erb
index bc9faf3f2..fc7ef2c9a 100644
--- a/app/views/exports/show.html.erb
+++ b/app/views/exports/show.html.erb
@@ -18,7 +18,7 @@
<div class="links">
<%= link_to( font_awesome_classic_tag("fa-file-#{@export.filename_extension}-o") + t("exports.show.exported_file"), exported_file_referential_export_path(@referential, @export.id) ) if @export.file_path %>
</div>
- <%= render( partial: "shared/ie_report.html", locals: { job: @export } ) %>
+ <%= render( partial: "shared/ie_report.html", locals: { job: @export, line_items: @line_items } ) %>
</div>
<% content_for :sidebar do %>
diff --git a/app/views/group_of_lines/_form.erb b/app/views/group_of_lines/_form.erb
index cb460c67e..0f92897ca 100644
--- a/app/views/group_of_lines/_form.erb
+++ b/app/views/group_of_lines/_form.erb
@@ -3,7 +3,7 @@
<%= form.input :name, :input_html => { :title => I18n.t("formtastic.titles#{format_restriction_for_locales(@referential)}.group_of_line.name") } %>
<%= form.input :registration_number, :input_html => { :title => I18n.t("formtastic.titles#{format_restriction_for_locales(@referential)}.group_of_line.registration_number") } %>
<%= form.input :comment %>
- <%= form.input :objectid, :required => !@group_of_line.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.group_of_line.objectid") } %>
+ <%= form.input :objectid, :required => !@group_of_line.new_record?, :input_html => { :title => I18n.t("formtastic.titles#{format_restriction_for_locales(@referential)}.group_of_line.objectid") } %>
<% end %>
<%= form.inputs do %>
diff --git a/app/views/help/GTFS_stops_import.textile b/app/views/help/GTFS_stops_import.textile
new file mode 100644
index 000000000..460ef56a1
--- /dev/null
+++ b/app/views/help/GTFS_stops_import.textile
@@ -0,0 +1,104 @@
+---
+layout: default
+title: Import massif d'arrêt en GTFS
+---
+Lors de l'intialisation d'un réseau dans CHOUETTE, la saisie manuelle de tous les arrêts est une tâche très laborieuse. Le format GTFS est relativement simple à éditer dans un tableur et permet de copier massivement les éléments pour les importer ensuite et s'épargner ainsi de longues heures de saisie et les erreurs qui peuvent en résulter.
+
+Le format GTFS se présente sous la forme d'un ensemble de fichier texte (.txt). Ils contiennent en réalité des données de type CSV. La principale difficulté que représente de l'édition d'un fichier GTFS réside dans son séparateur qui correspond à une norme américaine. En effet, c'est la virgule "," qui fait office de séparateur alors que la norme en cours chez nous est le point virgule, voire la tabluation.
+
+Certaines version d'Excel ne permettent pas de choisir la virgule comme séparateur. Il faut donc contourner cette lacune fonctionnelle par des opérations manuelles. Le tableur de Libre Office n'a en revanche pas ces problèmes de gestion des séparateurs, l'opération est bien plus simple en l'utilisant. Les consignes pour Excel proposées ici correspondent à la version 2010.
+
+L'import des arrêts par GTFS comporte également une limite par rapport au Pôles d'échanges. Ce type d'arrêt reconnu dans le format Neptune n'existe pas en GTFS, il n'est donc pas possible de créer ce type d'arrêt par l'import GTFS. Il reste en revanche possible de les créer manuellement en y rattachant les arrêts importés en GTFS.
+
+h3. Ouvrir les modèles de fichiers GTFS dans un tableur
+
+Télécharger dans l'aide en ligne de CHOUETTE les fichiers stops.txt et transfers.txt. Le premier est le fichier des arrêts, le second le fichier des correspondances.
+
+h4. Ouverture dans Excel
+
+Il convient en premier lieu de paramétrer windows pour que Excel prenne en charge les "." comme séparateur de décimale :
+* Dans le panneau de configuration Windows, choisir « Région et langue ».
+* Dans l'onglet formats, cliquer « paramètres supplémentaires »
+* Changer le symbole décimal de « , » à « . »
+* Changer le séparateur de liste de « ; » à « , »
+* Redémarrer Excel pour la prise en compte de la modification
+
+Le format de caractère est UTF8, le séparateur est la virgule.
+
+Première étape de l'import : choisir l'UTF8
+!2015-09-16_153205.png!
+
+seconde étape de l'import : choisir le séparateur virgule
+!2015-09-16_153317.png!
+
+Troisième étape : conserver les valeurs par défaut et valider.
+
+h4. Ouverture dans Libre Office
+
+Le processus d'importation est très proche de celui d'Excel. Il faut sélectionner l'UTF8 pour l'encodage des caractères et la virgule comme séparateur. Les étapes de modification des préférences dans windows sont superflues.
+!2015-09-16_153752.png!
+
+h3. Défintion des champs
+
+Les champs des tableaux ouverts dans un tableur sont les suivants.
+
+h4. Fichier des arrêts (stops.txt)
+
+* stop_id : identifiant de l'arrêt dans le système. Cet identifiant est obligatoire et doit être unique.
+* stop_code : ce champs est facultatif et correspond à un éventuel code de désignation métier de l'arrêt. Il est très utile de renseigner ce code pour faire notamment la différence entre un arrêt aller et un arrêt retour dans CHOUETTE.
+* stop_name : le nom public de l'arrêt, cet élément est obligatoire pour identifier l'arrêt dans CHOUETTE par la suite.
+* stop_desc : la description de l'arrêt, l'information est facultative.
+* stop_lat : la lattitude de l'arrêt au format WGS84 ; ce champ est obligatoire. Il est important de conserver le point "." comme séparateur de décimale.
+* stop_lon : la longitude de l'arrêt au format WGS84 ; ce champ est obligatoire. Il est important de conserver le point "." comme séparateur de décimale.
+* zone_id : le rattachement de l'arrêt à une zone. cette données est faculative
+* stop_url : une URL éventuellement attachée à l'arrêt. Cette donnée est facultative
+* location_type : le type d'arrêt. si le champs est vide ou contient la valeur 0, il s'agira d'un point d'arrêt, si la valeur est à 1, il s'agira d'un arrêt commercial. Le format GTFS ne prend pas en compte les types d'arrêts "quai d'embarquement" et "Pôle d'échange".
+* parent_station : ce champ est à remplir uniquement pour les arrêts physique (location_type=0) et seul le stop_id d'un arrêt commercial peut y figurer. Il n'est pas obligatoire de rattacher un arrêt de type 0 à un arrêt de type 1 sauf si l'objectif est d'exporter au format HUB.
+* wheelchair_boarding : ce champ facultatif indique si l'arrêt est accessible aux fauteuils roulants. Les valeurs sont :
+** 0 (ou vide) : l'information d'accessibilité de l'arrêt est inconnue. Si l'arrêt dépend d'un arrêt commercial, il hérite de la valeur définie au niveau de l'arrêt commercial.
+** 1 : L'arrêt est accessible aux fauteils roulants.
+** 2 : L'arrêt n'est pas accessible aux fauteuils roulants.
+* address_line : Ce champ faculatif est une extentions rajouté par CHOUETTE, il n'existe pas dans le GTFS au sens strict. Il s'agit du n° de voirie pour l'adresse postale.
+* locality : Ce champ faculatif est une extentions rajouté par CHOUETTE, il n'existe pas dans le GTFS au sens strict. Commune d'appartenance de l'arrêt.
+* postal_code : Ce champ faculatif est une extentions rajouté par CHOUETTE, il n'existe pas dans le GTFS au sens strict. Le code postal de la commune d'appartenance de l'arrêt.
+* stop_timezone : ce champ facultatif est à remplir si l'arrêt est dans un fuseau horaire différent de celui défini par défaut dans l'espace de données.
+
+h4. Fichier des correspondances (transfers.txt)
+
+* from_stop_id : l'identifiant de l'arrêt de départ de la correspondance. L'identifiant peut concerner soit un arrêt commercial soit un arrêt physique. Si un arrêt commercial est sélectionné, la correspondance sera validée pour les arrêts physiques qui en dépendent. Le champ est obligatoire.
+* to_stop_id : l'identifiant de l'arrêt d'arivée de la correspondance. L'identifiant peut concerner soit un arrêt commercial soit un arrêt physique. Si un arrêt commercial est sélectionné, la correspondance sera validée pour les arrêts physiques qui en dépendent. Le champ est obligatoire.
+* transfer_type : Ce champ obligatoire permet de définir le type de correspondance entre les deux arrêts.
+** 0 (ou vide) : correspondance possible entre deux arrêts sans délai.
+** 1 : la correspondance est possible et garantie (attente du véhicule en correspondance)
+** 2 : la correspondance est possible mais requiert un temps de trajet à pied défini dans le champ suivant.
+** 3 : la correspondance entre ces deux arrêts n'est pas possible. Cette valeur ne sera probablement pas nécessaire, sauf à ce que les systèmes exploitants la base issue de CHOUETTE créent des correspondances automatiquement.
+* min_transfer_time : ce champ est optionnel, il précise le temps de correspondance dans le cas où le "transfer_type" est fixé à "2".
+
+h3. Enregistrement des fichiers
+
+Une fois les informations saisies dans les tableaux, il est nécessaire de les enregistrer dans un format identique au format initial. L'opération risque d'être plus complexe que l'ouverture avec Excel.
+
+h4. Enregistrement avec Excel
+
+# Enregistrer le fichier en .csv (séparateur point-virgule) : Grâce aux changement de paramétrage mené dans le panneau de configuration avant l'ouverture du fichier il est possible d'enregistrer chacun des fichier en CSV (séparateur point-virgule). Même si le nom du format d'enregistrement fait référence au point-virgule, c'est bien une virgule qui est retenue lors de l'enregistrement.
+# Modifier l'extension du fichier en .txt : le format duu GTFS est le format txt. Or l'enregistrement avec le bon séparateur n'est posssible qu'en CSV. Il convient donc de changer l'extension du fichier de .csv à .txt.
+# Ouvrir le fichier dans le bloc note et l'enregistrer en UTF8 : Excel a bien enregistré le fichier avec des séparateurs "," mais il ne respecte pas l'encodage en UTF8. En l'ouvrant dans le bloc-note, il est possible de le réencoder en UTF8.
+!2015-09-16_175925.png!
+
+h4.Enregistrement avec Libre Office
+
+Les modifications de préférences windows ne sont pas nécessaires avec Libre office.
+# Faire enregistrer sous, séléctionner le format CSV
+# Au moment de l'enregistrement ou après, changer l'extension .csv en .txt
+!2015-09-16_180707.png!
+
+h3. Importer les données dans CHOUETTE
+
+Les fichiers doivent être zippés, qu'il y'en ai un ou deux. Ensuite au niveau de l'import :
+* Créer un nouvel import de type GTFS
+* Nommer l'import
+* Sélectionner "arrêts" dans la liste déroulante sous ensemble
+* Sélectionner le fichier .zip contenant les fichier arrêts et/ou correspondance
+!2015-09-16_181027.png!
+
+
diff --git a/app/views/help/browser.textile b/app/views/help/browser.textile
index e0586a702..f12b9eab9 100644
--- a/app/views/help/browser.textile
+++ b/app/views/help/browser.textile
@@ -7,11 +7,12 @@ h3. Navigateur prérequis
L’utilisation de l’application nécessite de disposer d’un navigateur ayant les caractéristiques suivantes :
-* Internet Explorer (Version 11 et +)
-* Mozilla FireFox (Version 33 et +)
-* Chrome (Version 38 et +)
+* Internet Explorer (Version 8 et + )
+* Mozilla FireFox (Version 33 et + )
+* Chrome (Version 38 et + )
h3. Paramétrage du navigateur
+
Le navigateur doit autoriser l’exécution de Javascript.
L'application s'affiche de façon lisible sur toutes les tailles d'écran, même si le confort d'utilisation est supérieur avec un poste de travail ayant une résolution d'au moins 1280x1024. \ No newline at end of file
diff --git a/app/views/help/connection.textile b/app/views/help/connection.textile
index 7f9ecee48..1065efdb8 100644
--- a/app/views/help/connection.textile
+++ b/app/views/help/connection.textile
@@ -13,9 +13,10 @@ h3. Utilisateurs et organisations
Lorsqu’un utilisateur s’enregistre dans l’application, une organisation qui lui appartient est créée.
-Il peut ensuite inviter des personnes à y accéder en les y associant dans l’onglet Organisation.
+Il peut ensuite inviter des personnes à y accéder en les y associant dans l’onglet Organisation.
!2014-10-30_173033.png!
+
Accès au menu organisation
Inviter d'autres utilisateurs dans son organisation permet de leur accorder un accès à ses espaces de données. Les invités ont les mêmes droits sur les éléments partagés que le titulaire de l'organisation. Il peut également être invité par d'autres utilisateurs et accéder ainsi à leurs données.
@@ -26,15 +27,16 @@ Un invité dans un espace de données peut également éditer la liste des invit
h3. Identification
-L'accès à CHOUETTE se fait par une identification par identifiant / mot de passe.
+L'accès à CHOUETTE se fait par une identification par identifiant / mot de passe. L'identifiant est l'adresse mail de l'utilisateur.
-Une fois identifié, l’utilisateur accède à un écran organisé autour des données qu'il peut gérer. Ces données sont organisées sous la forme d'un <<espace de données>>. A l'intérieur de chaque espace de données, des menus permettent de gérer (créer, modifier, supprimer) chaque type de données.
+Une fois identifié, l’utilisateur accède à un écran organisé autour des données qu'il peut gérer. Chacune d'entre-elle se présente sous la forme d'un espace de données. A l'intérieur de chaque espace de données, des menus permettent de gérer (créer, modifier, supprimer) chaque type de données.
L’application est disponible également en version anglaise et comprend le glossaire du présent manuel en ligne.
h3. Mot de passe perdu
-Dans l'hypothèse où un utilisateur a perdu son mot de passe, il peut en récupérer un nouveau en cliquant sur le lien _"mot de passe oublié"_ au niveau de la page d'identification. Un mail de remise à zéro du mot de passe lui sera envoyé sur l'adresse mail rentrée sur son profil.
+Dans l'hypothèse où un utilisateur a perdu son mot de passe, il peut en récupérer un nouveau en cliquant sur le lien _"mot de passe oublié"_ au niveau de la page d'identification. Un mail de remise à zéro du mot de passe lui sera envoyé sur l'adresse mail rentrée sur son profil. Il est nécessaire de cliquer le lien
!2014-12-01_151637.png!
-Réinitialisation du mot de passe
+
+Réinitialisation du mot de passe \ No newline at end of file
diff --git a/app/views/help/dataspaces.textile b/app/views/help/dataspaces.textile
index bdd2081ff..ef4f74fad 100644
--- a/app/views/help/dataspaces.textile
+++ b/app/views/help/dataspaces.textile
@@ -25,7 +25,13 @@ Il est également possible de le modifier depuis la page d'accueil de l'espace d
Sur la page d'un espace de données, deux fonctions spécifiques sont disponibles :
* Ajouter une clé d'accès API : La clé API permet à une application tierce de récupérer des données directement dans l'application pour les exploiter pour son propre fonctionnement. La clé, fournie par le prestataire chargé de la maintenance du système, permet au système tiers de s'identifier auprès de CHOUETTE.
-* Purge des données obsolètes : Cette fonction permet de supprimer tous les calendriers échus avant la date renseignée. Une fois les calendriers supprimés, CHOUETTE supprimera toutes les courses dépourvues de calendrier, puis les missions dépourvues de courses, etc. Cela permet de nettoyer la base de toutes ses informations obsolètes. Il est possible de ne pas supprimer certaines catégories d'objets en cliquant sur les options correspondantes, notamment dans les cas où la modification est saisonnière et où les objets conservés seront utilisés ultérieurement. Purger les données permet de conserver une base de taille raisonnable. Autrement, toutes les données obsolètes resteront dans la base sans pour autant être utiles.
+* Purge des données obsolètes : Cette fonction permet de nettoyer les données qui ne sont plus valides.
+
+La purge des données obsolètes supprime tous les calendriers échus avant la date renseignée. Une fois les calendriers supprimés, CHOUETTE supprime toutes les courses dépourvues de calendrier, puis les missions dépourvues de courses, etc. Ainsi, seules les informations totalement osbolètes sont effacées.
+
+Il est possible de ne pas supprimer certaines catégories d'objets en cliquant sur les options correspondantes, notamment dans les cas où la modification est saisonnière et où les objets conservés seront utilisés ultérieurement. Purger les données permet de conserver une base de taille raisonnable. Autrement, toutes les données obsolètes resteront dans la base sans pour autant être utiles.
+
+La purge des données ne supprime que les courses des lignes entièrement osbolètes. Dans le cas où seules certaines courses d'une mission sont obsolètes, il convient de les supprimer manuellement.
h3. Supprimer un espace de données
@@ -37,12 +43,13 @@ h3. Attributs d'un espace de données
Tous les champs sont obligatoires.
-* Nom : nom de l’espace de données
+* Nom : nom de l’espace de données, les caractères alphanumériques et le signe sousligné " _ " (underscore ou tiret du 8) sont autorisés.
* Code : code de l’espace de données
* Préfixe Neptune : préfixe utilisé par défaut lors la génération de nouveaux identifiants Neptune
* Projection géographique : référentiel de projection des coordonnées cartographiques en complément du WGS84
* Fuseau horaire : fuseau horaire applicable pour les horaires des courses.
-* Emprise par défaut : emprise (en WGS84) utilisée pour positionner les cartes lorsqu’il n’y a pas d’élément à afficher. Lors de la création, chacun des points défini un carré pour l'affichage par défaut de la cartographie.
+* Emprise par défaut : emprise (en WGS84) utilisée pour positionner les cartes lorsqu’il n’y a pas d’élément à afficher. Lors de la création, chacun des points définit un carré pour l'affichage par défaut de la cartographie.
+* Format d'export privilégié : les formulaires de saisie intègrent les exigences particulières du format sélectionné. Le choix de ce format privilégié facilite la validité de l'export des données saisies.
h3. Choix du référentiel de projection géographique
diff --git a/app/views/help/export_format.textile b/app/views/help/export_format.textile
index e21d4fa21..53f513cae 100644
--- a/app/views/help/export_format.textile
+++ b/app/views/help/export_format.textile
@@ -11,28 +11,30 @@ h3. Formats disponibles
* Neptune : format d'échange de données de transport en commun pour la France (cf ["Normalisation":http://www.normes-donnees-tc.org/format-dechange/donnees-theoriques/])
* NeTEx : format d'échange de données de transport en commun expérimental sur la future norme européenne ["NeTEx":http://www.normes-donnees-tc.org/format-dechange/donnees-theoriques/] mais limité au sous-ensemble des données définies dans le format Neptune
-* CSV : format tabulaire spécifique à Chouette (cf "CSV":csv)
* GTFS : format destiné à ["Google Transit":https://developers.google.com/transit/gtfs/?hl=fr] ; les données exportées en GTFS sont explicités ["ICI":http://www.normes-donnees-tc.org/format-dechange/autres-normes/]
-* KML : format contenant l'ensemble des données cartographiées pouvant ainsi être importées dans un SIG
-* HUB : format tabulaire interne Transdev
+* KML : format contenant l'ensemble des données cartographiées pouvant ainsi être importée dans un SIG
+* HUB : format tabulaire interne Transdev dans sa version 1.3
+
+p. Note : le format CSV de Chouette a été supprimé, en effet, celui-ci était limité à des lignes définissant un unique aller simple ou aller/retour. Ce format est remplacé par l'import/export d'horaires disponible dans les formulaires de séquences d'arrêt. Il convient de se reporter à la rubrique "Exporter et importer des horaires en .csv":vehicle_journeys_import_export pour plus de détails.
h3. Options des formats
Les options des différents formats apparaissent en fonction de celui qui a été choisi.
+!2015-07-23_162747.png!
+
+p=. Formulaire pour un nouvel export Neptune
+
* *tout format* :
-** Type de données incluses :sélection des lignes exportées. Le choix porte sur toutes, les lignes d'une sélection de réseaux, de transporteurs ou directement sélectionnées ;
+** Type de données incluses : sélection des lignes exportées. Le choix porte sur toutes, les lignes d'une sélection de réseaux, de transporteurs ou directement sélectionnées :
** Données incluses : liste des données selon le type choisi; ce champs n'apparait pas pour le choix 'toutes' la sélection propose dès le premier caractère saisi la liste des objets dont le nom contient le texte.
-* *Neptune* :
** Début de période : permet d'exporter uniquement les courses circulant à partir de cette date
** Fin de période : permet d'exporter uniquement les courses circulant jusqu'à cette date
+* *Neptune* : pas d'option particulière
* *GTFS* :
-** Préfixe d'identifiant Neptune à ignorer : lorsque ce préfixe est rencontré dans l'identifiant Neptune, celui-ci n'est pas utilisé pour générer l'identifiant GTFS . La valeur proposée par défaut est celle de l'espace de données.
+** Préfixe d'identifiant Neptune à ignorer : Lorsque ce préfixe est rencontré dans l'identifiant Neptune, celui-ci n'est pas utilisé pour générer l'identifiant GTFS . La valeur proposée par défaut est celle de l'espace de données.
** Fuseau horaire : fixe le fuseau horaire (paramètre obligatoire des données GTFS). La valeur proposée par défaut est celle de l'espace de données.
** Données incluses (complément) : le choix des arrêts permet de n'exporter que les fichiers d'arrêts (stops.txt) et de correspondances (transfers.txt). 3 champs sont alors ajoutés : l'adresse, la localité et le code postal; ceux-ci seront exploités en retour sur l'import GTFS d'arrêts.
* *NeTex* : pas d'option particulière
-* *CSV* : pas d'option particulière
* *HUB* :
-** Début de période : permet d'exporter uniquement les courses circulant à partir de cette date.
-** Fin de période : permet d'exporter uniquement les courses circulant jusqu'à cette date.
** Fuseau horaire : fixe le fuseau horaire, la valeur proposée par défaut est celle de l'espace de données.
diff --git a/app/views/help/exports.textile b/app/views/help/exports.textile
index 57ceb65c3..5f7fed0b2 100644
--- a/app/views/help/exports.textile
+++ b/app/views/help/exports.textile
@@ -3,14 +3,18 @@ layout: default
title: Exports
---
-h3. Rôle
+h3(#rol). Rôle
p. L'export permet d'extraire de la base un ensemble de données selon un format
-h3. Options des formats
+
+
+h3(#opt). Options des formats
Les options des différents formats apparaissent en fonction de celui qui a été choisi.
+!2015-07-23_162747.png! Formulaire pour un nouvel export Neptune
+
* *tout format* :
- Type de données incluses :=
@@ -19,12 +23,11 @@ le choix porte sur toutes, les lignes d'une sélection de réseaux, de transport
- Données incluses :=
liste des données selon le type choisi; ce champs n'apparait pas pour le choix 'toutes'
la sélection propose dès le premier caractère saisi la liste des objets dont le nom contient le texte =:
-
-* *Neptune* :
-
- Début de période := permet d'exporter uniquement les courses circulant à partir de cette date
- Fin de période := permet d'exporter uniquement les courses circulant jusqu'à cette date
+* *Neptune* : pas d'option particulière
+
* *GTFS* :
- Fuseau horaire :=
@@ -32,31 +35,47 @@ fixe le fuseau horaire (paramètre obligatoire des données GTFS)
la valeur proposée par défaut est celle de l'espace de données =:
- Données incluses (complément) :=
le choix des arrêts permet de n'exporter que les fichiers d'arrêts (stops.txt) et de correspondances (transfers.txt)
- 3 champs sont alors ajoutés : l'adresse, la localité et le code postal; ceux-ci seront exploités en retour sur l'import GTFS d'arrêts =:
+ 3 champs sont alors ajoutés : l'adresse, la localité et le code postal; ceux-ci seront exploités en retour sur l'Export GTFS d'arrêts =:
* *NeTex* : pas d'option particulière
-* *CSV* : pas d'option particulière
+* *HUB* : pas d'option particulière
-* *HUB* :
+* *KML* : pas d'option particulière
-- Début de période := permet d'exporter uniquement les courses circulant à partir de cette date
-- Fin de période := permet d'exporter uniquement les courses circulant jusqu'à cette date
-- Fuseau horaire :=
-fixe le fuseau horaire
- la valeur proposée par défaut est celle de l'espace de données =:
+h3. Consultation des résultats
+p. L’Export est lancé en différé, son état d'avancement est affiché dans la page de résultats pendant le déroulement du processus.
-h3. Consultation des résultats
+p=. !2015-07-23_162942.png!
+
+p. Le résultat d'Export fournit 2 synthèses :
+
+*Synthèse des lignes (onglet lignes)
+*Synthèse des fichiers analysés (onglet fichiers)
+
+p. Le bouton « Fichier exporté » permet de télécharger le fichier sur son poste.
+
+p. _1 - La synthèse des lignes affiche le compte des objets extraits des fichiers correctement traités_
+
+p(border_image). !2015-07-23_165033.png!
+
+* lignes
+* séquences d'arrêts
+* correspondances
+* calendriers
+* zones d'arrêt
+* accès
+* courses
+* missions
+
+p. Dérouler une ligne en cliquant sur le pictogramme "+" permet d'afficher le détail des éléments Exportés sur la ligne :
+
+p(border_image). !2015-07-23_165157.png!
-p. L'export est lancé en différé; son état d'avancement est affiché sous la forme d'une icône donc la couleur dépend de l'état:
+p. _2 - La synthèse des fichiers analysés affiche la liste des fichiers Exportés ainsi que les erreurs constatées_
-* blanc : en attente
-* bleu : en cours
-* vert : terminé correctement; un lien de téléchargement est alors disponible
-* rouge : terminé en échec
+p(border_image). !2015-07-23_165644.png!
-p. La consultation du résultat de l'export donnera la liste des éléments exportés ou les motifs de l'échec.
-p. Le résultat est conservé ainsi que le fichier produit tant que l'export n'est pas supprimé.
diff --git a/app/views/help/group_of_lines.textile b/app/views/help/group_of_lines.textile
index 8fd05c7ea..6ac0cbd19 100644
--- a/app/views/help/group_of_lines.textile
+++ b/app/views/help/group_of_lines.textile
@@ -44,7 +44,7 @@ On peut modifier un groupe de lignes en cliquant sur le bouton de suppression di
h3. Attributs d'un groupe de lignes
-* Nom : nom du groupe de lignes
+* Nom : nom du groupe de lignes, les caractères alphanumériques et le signe "_" (underscore ou tiret du 8) sont autorisés.
* Commentaire : Champs de saisie libre pour identifier l'usage du groupe de lignes.
* Numéro d'enregistrement : Le numéro d'enregistrement est unique. Aucune règle de nommage ne s'applique sur ce numéro. Celui-ci doit être unique sur l'ensemble des groupes de lignes.
diff --git a/app/views/help/hubexport.textile b/app/views/help/hubexport.textile
index 6ddafceab..dca54596c 100644
--- a/app/views/help/hubexport.textile
+++ b/app/views/help/hubexport.textile
@@ -1,27 +1,104 @@
----
-layout: default
-title: Contraintes de l'export HUB
----
-
-CHOUETTE est en mesure d'exporter la base au format HUB qui est un format spécifique aux outils métiers Transdev. Le format HUB comprend des contraintes plus importantes que les formats Neptune, notamment sur la longueur de certains noms. Pour que la base puisse être exportée sans difficulté, il faut donc se conformer à ces contraintes de longueur de noms, ainsi que utiliser certaines fonctions comme les groupes de lignes qui sont facultatives pour leur seul format Neptune mais qui sont obligatoire dans le format HUB.
-
-h3. Liste des champs contraints
-
-[rédaction en cours ...]
-
-h3. Correspondances
-
-CHOUETTE permet de faire des correspondances entre différents types d'arrêts. Dans le format HUB en revanche, seules les correspondances entre les arrêts physiques sont prises en compte. Il convient donc de vérifier que les correspondances sont bien paramétrées entre les arrêts de type _"point d'arrêt"_ et _"quai"_.
-
-h3. Lignes et séquences d'arrêts
-
-Lors de la création de lignes et des séquences d'arrêts, il est nécessaire de respecter deux contraintes pour permettre la compatibilité de l'export HUB :
-
-* Ne pas créer plus de deux séquences d'arrêts pour une même ligne.
-* Renseigner impérativement le sens de la ligne :
-**Dans le cas où il n'existe qu'une séquence d'arrêts, choisir le sens aller
-**Dans le cas où il existe deux séquences d'arrêts, définir un sens aller et un sens retour
-
-h3. Créer des groupes de lignes
-
-Les lignes à exporter doivent impérativement faire partie d'un groupe de lignes pour pouvoir être exportées en HUB.
+---
+layout: default
+title: Contraintes de l'export HUB
+---
+
+CHOUETTE est en mesure d'exporter la base au format HUB qui est un format spécifique aux outils métiers Transdev. Le format HUB comprend des contraintes plus importantes que les formats Neptune, notamment sur la longueur de certains noms. Pour que la base puisse être exportée sans difficulté, il faut donc se conformer à ces contraintes de longueur de noms, ainsi que utiliser certaines fonctions comme les groupes de lignes qui sont facultatives pour leur seul format Neptune mais qui sont obligatoire dans le format HUB.
+
+CHOUETTE contrôle le respect de ces contraintes lors de l'export. Il listera les anomalies dans le log de l'export mais ne les signalera pas lors de la saisie proprement dite. Il est donc nécessaire de se référer à ce document avant de commencer la saisie de la base, certaines contraintes ayant des conséquences sur la façon dont les données doivent être structurées.
+
+L'un des points essentiels est la nécessite de renseigner manuellement l'identifiant Neptune. Pour rappel, celui-ci est composé de trois éléments :
+
+* Le préfixe qui est toujours identique au sein d'un même espace de données.
+* Le type d'information qui est déterminé par le type d'objet (réseau, arrêt, ligne...) actuellement défini.
+* Le suffixe qui est un élément identifiant unique qui peut être contraint en taille et en type de caractères pour l'export au format HUB
+
+Le type d'information ainsi que la syntaxe à respecter sont rappelés dans une infobulle contextuelle qui apparaît lorsqu'on place le curseur au-dessus du champ _'''Identifiant Neptune'''_
+
+h3. Réseaux
+* Nom du réseau : 75 caractères maximum
+* Numéro d’enregistrement : 8 chiffres maximum
+* Identifiant Neptune : 3 caractères maximum
+
+h3. Transporteur
+* Nom du transporteur : 75 caractères maximum
+* Numéro d’enregistrement : 8 chiffres maximum
+* Identifiant Neptune : 3 caractères maximum
+
+h3. Calendriers
+
+* Identifiant Neptune : 6 caractères maximum
+* Commentaire : Facultatif, 75 caractères maximum
+
+h3. Arrêts
+
+h4. Arrêt commercial et arrêt physique
+
+Un arrêt physique (quai ou point d'embarquement) doit nécessairement dépendre d'un arrêt commercial. Dans le cas où il existe plusieurs arrêts physiques, typiquement dans le cas d'un arrêt dans le sens aller et un arrêt dans le sens retour, les deux arrêts physiques seront regroupés au sein d'un même arrêt commercial.
+
+h4. Pôle d'échange
+
+Les arrêts de type pôle d'échange ne sont pas pris en charge par le format HUB.
+
+h4. Contraintes sur les champs :
+
+* Troisième composante de l'identifiant technique : 6 caractères maximum
+* Nom de l'arrêt : 75 caractères maximum
+* Point d'intérêt le plus proche : ce champs est facultatif. S'il est rempli, il ne doit pas contenir plus de 255 caractères pour les arrêts commerciaux et plus de 60 caractères pour les arrêts physiques.
+* Géolocalisation : obligatoire et au format WGS84
+* Commune : 80 caractères maximum
+* Code INSEE : obligatoire
+* Commentaire : champs facultatif, 255 caractères maximum si rempli
+* Identifiant Neptune : 6 caractères maximum. L'identifiant est obligatoire pour les arrêts physiques. Il correspond au code de l'arrêt dans le format HUB. Chaque identifiant doit être unique.
+* Numéro d'enregistrement : 8 chiffres au maximum. Le n° d'enregistrement est obligatoire. Il est numérique uniquement et correspond au n° IDAP dans le format HUB.
+
+h3. Correspondances
+
+CHOUETTE permet de faire des correspondances entre différents types d'arrêts. Dans le format HUB en revanche, seules les correspondances entre les arrêts physiques sont prises en compte. Il convient donc de vérifier que les correspondances sont bien paramétrées entre les arrêts de type _"point d'arrêt"_ et _"quai"_.
+
+h4. Contraintes sur les champs :
+
+* Distance : 4 chiffres maximum
+* Identifiant Neptune : non exporté dans le HUB
+* Temps de parcours : 4 chiffres maximum (minutes et secondes)
+
+h3. Groupe de lignes
+
+Les lignes à exporter en HUB doivent impérativement faire partie d'un groupe de lignes.
+
+h4. Contraintes sur les champs :
+
+* Nom du groupe de ligne : 75 caractères maximum
+* Identifiant Neptune : 6 caractères maximum
+
+h3. Lignes, séquences d'arrêts et missions
+
+Lors de la création de lignes et des séquences d'arrêts, il est nécessaire de respecter deux contraintes pour permettre la compatibilité de l'export HUB :
+
+* Ne pas créer plus de deux séquences d'arrêts pour une même ligne.
+* Renseigner impérativement le sens de la ligne :
+**Dans le cas où il n'existe qu'une séquence d'arrêts, choisir le sens aller
+**Dans le cas où il existe deux séquences d'arrêts, définir un sens aller et un sens retour
+
+Les champs de création de ligne doivent être créés avec les contraintes suivantes :
+
+* Indice de la ligne : 6 caractères maximum
+* Nom de la ligne : 75 caractères maximum ; pas de doublons possibles
+* Groupe de ligne : une ligne ne doit appartenir qu'à un seul groupe de ligne
+* Identifiant Neptune : 14 caractères maximum
+
+h4. Contraintes sur les champs :
+
+* Identifiant Neptune du schéma de ligne: 8 caractères maximum
+* Identifiant Neptune de la mission : 30 caractères maximum
+* Nom d'une mission : 75 caractères maximum
+* Numéro d'enregistrement d'une mission : 8 chiffres maximum
+
+h3. Courses
+
+* Troisième composante de l'identifiant Neptune : 8 caractères maximum
+* Identifiant public : 8 caractères maximum
+* Commentaire : Facultatif, 75 caractères maximum
+
+
+
diff --git a/app/views/help/import_formats.textile b/app/views/help/import_formats.textile
index 2a6c5014e..ea19fc24a 100644
--- a/app/views/help/import_formats.textile
+++ b/app/views/help/import_formats.textile
@@ -7,20 +7,19 @@ h3(#fmt). Formats disponibles
* Neptune : format d'échange de données de transport en commun pour la France (cf ["Normalisation":http://www.normes-donnees-tc.org/format-dechange/donnees-theoriques/])
* NeTEx : format d'échange de données de transport en commun expérimental sur la future norme européenne ["NeTEx":http://www.normes-donnees-tc.org/format-dechange/donnees-theoriques/] mais limité au sous-ensemble des données définies dans le format Neptune
-* CSV : format tabulaire spécifique à Chouette (cf "CSV":csv)
* GTFS : format originaire de ["Google Transit":https://support.google.com/transitpartners/], à condition que le fichier soit préalablement validé avec l'outil Feed Validator =:
+** les données exportées en GTFS sont explicités ["ICI":http://www.normes-donnees-tc.org/format-dechange/autres-normes/]
+** l'import limité au sous ensemble des arrêts permet de n'importer que les arrêts et les correspondances
-p(olnext). - les données exportées en GTFS sont explicités ["ICI":http://www.normes-donnees-tc.org/format-dechange/autres-normes/]
-
-p(olnext). - l'import GTFS limité au sous ensemble des arrêts permet de n'importer que les arrêts et les correspondances
+p. Note : le format CSV de Chouette a été supprimé, en effet, celui-ci était limité à des lignes définissant un unique aller simple ou aller/retour. Ce format est remplacé par l'import/export d'horaires disponible dans les formulaires de séquences d'arrêt. Il convient de se reporter à la rubrique "Exporter et importer des horaires en .csv":vehicle_journeys_import_export pour plus de détails.
h3(#com). Paramètres communs
* Pas de sauvegarde : permet d'effectuer une simulation de l'import sans enregistrer les données
-p(ddnext). - active donc les tests de validation de niveau 1 et 2
+p(ddnext). - active donc les tests de validation
-* Jeu de paramètres pour validation := paramètres définissant les seuils des tests de niveau 3 (indisponible si l'option 'pas de sauvegarde' est cochée)
+* Jeu de paramètres pour validation : paramètres définissant les seuils des tests de niveau 3
p(ddnext). - les jeux de paramètres sont créés via le lien ["Jeux de paramètres":parametersets] disponible sur les vues des listes d'imports et de validations
@@ -34,10 +33,8 @@ Les options des différents formats apparaissent en fonction de celui qui a étÃ
* *NeTex* : pas d'option particulière
* *GTFS* :
** Préfixe d'identifiants : préfixe à utiliser pour générer les identifiants Neptune des objets importés, initialisé à la valeur définie pour l'espace de données.
-** Distance max pour créer les zones : distance maximale entre deux arrêts homonymes pour les regrouper au sein d'un arrêt commercial de même nom, ces zones viennent en supplément de celles définies dans GTFS; une distance de 0 ne génère aucune zone.
+** Distance max pour créer les zones : distance maximale entre deux arrêts homonymes pour les regrouper au sein d'un arrêt commercial de même nom, ces zones viennent en supplément de celles définies dans GTFS, une distance de 0 ne génère aucune zone.
** ignorer le dernier mot : lors de la comparaison des noms d'arrêts, cette option permet de ne pas prendre en compte le dernier mot du nom de l'arrêt (sauf si celui-ci n'est composé que d'un seul mot).
** ignorer les n derniers caractères : lors de la comparaison des noms d'arrêts, cette option permet de ne pas prendre en compte les derniers caractères du nom de l'arrêt (sauf si celui-ci n'a pas assez de caractères pour cela)
-** Distance max pour créer les correspondances : distance maximale entre deux arrêts pour les lier par une correspondance, ces correspondances sont hors zone d'arrêt: elles viennent en supplément de celles définies dans GTFS (ce mécanisme tient compte des correspondances exclues), une distance de 0 ne génère aucune correspondance.
-** Sous-ensemble : choix permettant de limiter l'import aux seuls fichiers stops.txt et transfers.txt. Lors de l'import, les attributs d'adresse, localité et code postal ajoutés à l'export associé sont exploités :
-* *CSV* :
-** Préfixe d'identifiants : préfixe à utiliser pour générer les identifiants Neptune des objets importés, initialisé à la valeur définie pour l'espace de données. \ No newline at end of file
+** Distance max pour créer les correspondances : distance maximale entre deux arrêts pour les lier par une correspondance, ces correspondances sont hors zone d'arrêt. Elles viennent en supplément de celles définies dans GTFS (ce mécanisme tient compte des correspondances exclues), une distance de 0 ne génère aucune correspondance.
+** Sous-ensemble : choix permettant de limiter l'import aux seuls fichiers stops.txt et transfers.txt. Lors de l'import, les attributs d'adresse, localité et code postal ajoutés à l'export associé sont exploités. \ No newline at end of file
diff --git a/app/views/help/imports.textile b/app/views/help/imports.textile
index ca085532d..77c0b8b2d 100644
--- a/app/views/help/imports.textile
+++ b/app/views/help/imports.textile
@@ -4,21 +4,28 @@ title: Imports
---
* "Rôle":#rol
+* "Horaires":#hor
* "Validation":#val
* "l’onglet IMPORTS":#imp
* "Nouvel Import":#new
-* "Paramètres de validation":#pvl
+* "Paramètres de validation":pvl
* "Consultation des résultats":#res
* "Résultats de validation":#rvl
h3(#rol). Rôle
-p. L’import permet d’enregistrer dans la base un jeu de données d'offre TC, selon un format au choix. Des tests de validation des données sont exécutés avant l'import en base de données (plus détaillées dans le cas du format Neptune). Il est possible d'importer sans sauver en base, uniquement pour jouer les tests de vérification de conformité. Dans ce cas, les tests en base de données (auxquels sont associés les jeux de paramètres) ne seront pas exécutés (et donc aucun test ne sera exécuté, pour des données CSV, GTFS, ou Netex).
+p. L’import permet d’enregistrer dans la base un jeu de données d'offre TC, selon un format au choix. Des tests de validation des données sont exécutés avant l'import en base de données (plus détaillées dans le cas du format Neptune). Il est possible d'importer sans sauver en base, uniquement pour jouer les tests de vérification de conformité.
p=. !2014-10-31_151613.png!
Page des imports
+h3(#hor). Import des horaires
+
+p. Une seconde fonction d'import export est disponible au niveau des horaires. Cette fonction est différente de l'import/export de base, elle vise à simplfiier la saisie des horaires en permettant des échanges entre CHOUETTE et un tableur. Les données sont téléchargeable au format CSV puis réimportées après modification, toujours au niveau des lignes. Cette fonction d'import/export spécifique n'intègre pas d'étape de test et de validation.
+
+p. Pour plus d'informations sur l'import/export des horaires, consulter le chapitre "Courses et horaires":vehicle_journeys ainsi que l'annexe "Exporter et importer des horaires en .csv":vehicle_journeys_import_export.
+
h3(#val). Validation
p. Lors de l'import, des tests sont effectués :
@@ -27,66 +34,70 @@ p. Lors de l'import, des tests sont effectués :
# sur la complétude et la cohérence des relations exprimées dans le format d'échange
# optionnellement sur la qualité des données en vue de son exploitation dans une centrale de mobilité
-p(olnext). - la validation nécessite la fourniture d'un jeu de paramètres définissant les seuils (cf "Validation":validations)
+p(olnext). - nécessite la fourniture d'un jeu de paramètres définissant les seuils (cf "Validation":validations)
-p(note). Les tests de niveau 1 et 2 ne sont actuellement implémentés que pour le format Neptune.
+p(note). Les tests de niveau 1 et 2 ne sont actuellement implémentés que pour les formats Neptune et GTFS
h3(#imp). l'onglet IMPORTS
p. L'onglet IMPORTS contient les objets Import de l'espace de données courant.
-p. Chaque objet Import est représenté par une vignette comprenant : sa date, l'utilisateur qui l'a créé, son état (blanc: en attente, bleu : en cours ; vert : terminé correctement ; rouge : terminé en échec), un lien pour télécharger le fichier importé, un lien vers le détail de l'objet, un lien vers l'objet Validation associé).
-
-p=. !import.png!
+p. Chaque objet Import est représenté par une vignette comprenant : sa date, l'utilisateur qui l'a créé, le type de profil importé, son état (blanc: en attente, bleu : en cours ; vert : terminé correctement ; rouge : terminé en échec), un lien pour télécharger le fichier importé, un lien vers le détail de l'objet, un lien vers l'objet Validation associé).
p. Comme les fichiers importés restent stockés en base, il est opportun que l'utilisateur supprime périodiquement les objets Imports devenus inutiles. La suppression supprimera aussi les objets Validation associés.
p. Dans la partie droite de l'écran,
-* Créer un nouvel Import
+* créer un nouvel Import
* Jeu de paramètres
h3(#new). Nouvel Import
-p. Il est possible de modifier le jeu de paramètres par défaut ou de créer un nouveau Jeu de paramètres. Il est possible de ne choisir aucun jeu de paramètres.
+p. La page d'un nouvel import donne le choix entre trois profils d'import : Neptune, Netex et GTFS. Chacun de ces profils est accessible par un onglet dédié. Les formulaires Neptune et Netex sont identiques.
-p. L’import est lancé en différé, son résultat n'est pas immédiat. Le résultat est conservé tant que l’import n’est pas supprimé. L'import lance également la validation (avec ou sans jeu de paramètres associés), ce qui crée un objet Validation associé. La suppression d’un import supprime également l'objet Validation associé à cet import ; néanmoins si les données ont été sauvegardées en base, elles seront conservées.
-p. Si les données ne sont pas sauvées en base, il faut relancer un import avec sauvegarde si on souhaite effectivement importer ces données en base après une première validation « à blanc ».
+p=. !2015-07-23_152040.png!
+Page d'un nouvel import
-h3(#pvl). Paramètres de validation
+* La case à cocher "Pas de sauvegarde" permet de tester les données à importer sans modifier la base.
+* Il est également possible de sélectionner un autre jeu de validation. Il est possible de ne choisir aucun jeu de paramètres.
-p. Il est possible de modifier le jeu de paramètres par défaut, ou de créer un nouveau Jeu de paramètres. Les paramètres de vitesses et durée entre arrêts successifs sont définis mode par mode.
+p. Le profil GTFS contient des champs spécifiques.
-h3(#res). Consultation des résultats : détail de l'objet Import
+p=. !2015-07-23_152615.png!
+Page d'import GTFS
-p=. !import_result.png!
+* Le choix d'un sous-ensemble permet de n'importer qu'une partie de la base, comme par exemple les arrêts.
+* Le préfixe d'identifiants est renseigné par défaut et peut-être laissé en l'état.
+* Distance max pour créer les zones : Distance maximale en mètres de regroupement des points d'arrêts dont le nom est identique au sein d'un même arrêt commercial. Si la valeur est à 0, aucun regroupement n'est fait.
+* Case à cocher "ignorer le dernier mot" : Permet d'ignorer le dernier mot d'un nom d'arrêt pour faciliter le regroupement de plusieurs arrêts physiques dont le nom serait légèrement différent au sein d'un même arrêt commercial
+* Ignorer les n derniers caractères : Même fonctionnalité qu'ignorer le dernier mot mais un certain nombre de caractères.
+* Distance max pour créer les correspondances : la valeur en mètres en dessous de laquelle deux arrêts sont automatiquement considérés en correspondance.
-p. Le résultat d'import fournit 2 synthèses :
+p. L’import est lancé en différé, son résultat n'est pas immédiat. Le résultat est conservé tant que l’import n’est pas supprimé. L'import lance également la validation (avec ou sans jeu de paramètres associés), ce qui crée un objet Validation associé. La suppression d’un import également l'objet Validation associé à cet import ; néanmoins si les données ont été sauvegardées en base, elles seront conservées.
+
+p. Si les données ne sont pas sauvées en base, il faut relancer un import avec sauvegarde si on souhaite effectivement importer ces données en base après une première validation « à blanc ».
-# Synthèse des fichiers analysés (à gauche)
-# Synthèse des lignes lues (à droite)
-p. Le bouton « Fichier Importé » permet de télécharger le fichier sur son poste.
+h3(#pvl). Paramètres de validation
-p. Le bouton « Validation » permet de basculer vers la validation des données.
+p. Il est possible de modifier le jeu de paramètres par défaut ou de créer un nouveau Jeu de paramètres. Les paramètres de vitesses et durée entre arrêts successifs sont définis mode par mode.
-p. _1 - La synthèse des fichiers analysés affiche 3 secteurs_
+h3(#res). Consultation des résultats : détail de l'objet Import
-p(border_image). !import_file_result.png!
+p=. !import_result.png!
-* en vert les fichiers correctement traités
-* en rouge les fichiers comportant des erreurs qui empêche leur traitement
-* en gris les fichiers ignorés
+p. Le résultat d'import fournit 2 synthèses :
-p. En passant la souris sur chaque partie, le nombre de fichiers correspondant est affiché.
+* Synthèse des lignes lues (onglet lignes)
+* Synthèse des fichiers analysés (onglet fichiers)
-p. La sélection (clic souris) d'un des secteurs affiche la liste des fichiers concernés :
+p. Le bouton « Fichier source » permet de télécharger le fichier sur son poste.
-p(border_image). !import_file_detail.png!
+p. Le bouton « Rapport de validation » permet de basculer vers la validation des données.
-p. _2 - La synthèse des lignes lues affiche le compte des objets extraits des fichiers correctement traités_
+p. _1 - La synthèse des lignes lues affiche le compte des objets extraits des fichiers correctement traités_
p(border_image). !import_line_result.png!
@@ -99,13 +110,13 @@ p(border_image). !import_line_result.png!
* courses
* missions
-p. La sélection de l'histogramme (clic) affiche le détail des lignes lues :
+p. Dérouler une ligne en cliquant sur le pictogramme "+" permet d'afficher le détail des éléments importés sur la ligne :
p(border_image). !import_line_detail.png!
-p. Un survol affiche le nombre de données concernées par type.
+p. _2 - La synthèse des fichiers analysés affiche la liste des fichiers importés ainsi que les erreurs constatées_
-p. La sélection du graphique affiche le détail par ligne.
+p(border_image). !import_file_detail.png!
h3(#rvl). Résultats de validation
diff --git a/app/views/help/index.textile b/app/views/help/index.textile
index a713c6433..fb04016ee 100644
--- a/app/views/help/index.textile
+++ b/app/views/help/index.textile
@@ -3,7 +3,7 @@ layout: default
title: Chouette
---
-Version 3.0.0
+Version 3.2.0
h3. Logiciel libre propriété de :
@@ -20,10 +20,33 @@ Ce logiciel est régi par la licence CeCILL-B soumise au droit français et resp
En contrepartie de l'accessibilité au code source et des droits de copie, de modification et de redistribution accordés par cette licence, il n'est offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, seule une responsabilité restreinte pèse sur l'auteur du programme, le titulaire des droits patrimoniaux et les concédants successifs.
-A cet égard l'attention de l'utilisateur est attirée sur les risques associés au chargement, à l'utilisation, à la modification et/ou au développement et à la reproduction du logiciel par l'utilisateur étant donné sa spécificité de logiciel libre, qui peut le rendre complexe à manipuler et qui le réserve donc à des développeurs et des professionnels avertis possédant des connaissances informatiques approfondies. Les utilisateurs sont donc invités à charger et tester l'adéquation du logiciel à leurs besoins dans des conditions permettant d'assurer la sécurité de leurs systèmes et ou de leurs données et, plus généralement, à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
+A cet égard l'attention de l'utilisateur est attirée sur les risques associés au chargement, à l'utilisation, à la modification et/ou au développement et à la reproduction du logiciel par l'utilisateur étant donné sa spécificité de logiciel libre, qui peut le rendre complexe à manipuler et qui le réserve donc à des développeurs et des professionnels avertis possédant des connaissances informatiques approfondies. Les utilisateurs sont donc invités à charger et tester l'adéquation du logiciel à leurs besoins dans des conditions permettant d'assurer la sécurité de leurs systèmes et ou de leurs données et, plus généralement, à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
h3. Notes de version
+h4. Version 3.2.0
+
+* Nouvelles fonctionnalités :
+** Gestion des tracés de missions
+*** incluant l'import/export des shapes GTFS
+** Gestion des courses en fréquence
+*** incluant l'import/export en Neptune et GTFS
+** Affichage des cartes en 'plein écran'
+
+h4. Version 3.1.0
+
+* Nouvelles fonctionnalités :
+** Validation lors de l'import GTFS
+
+* Améliorations
+** Simplification des rapports d'import/export et validation
+** Mise en adéquation de Chouette sur la norme Neptune
+** compléments d'aide
+
+* Corrections des anomalies suivantes :
+** Consultation des clé d'API
+
+
h4. Version 3.0.0
* Nouvelles fonctionnalités :
diff --git a/app/views/help/introduction.textile b/app/views/help/introduction.textile
index 544edd8aa..9691fe385 100644
--- a/app/views/help/introduction.textile
+++ b/app/views/help/introduction.textile
@@ -5,19 +5,18 @@ title: Présentation
CHOUETTE est un logiciel libre développé à l'initiative du ministère français chargé des transports (et du développement durable), dans le but de faciliter l'échange de données d'offre (théorique) de transport collectif (TC), en s'appuyant pour cela sur la norme NFP 99506, dite Neptune, qui spécifie un profil d'échange XML.
-!version.png!
-CHOUETTE est une application web. Elle permet de saisir, éditer, tester des données théoriques de transport public depuis un navigateur internet. Afin de faciliter la création de réseaux complets, elle est dotée de fonctions d'import, soit depuis d'autres formats d'applications équivalentes, soit au travers d'un fichier CSV qui permet de mener des imports massifs plutôt que de saisir tous les éléments un à un dans les formulaires adhoc.
+CHOUETTE est une application web. Elle permet de saisir, éditer, tester des données théoriques de transport public depuis un navigateur internet. Afin de faciliter la création de réseaux complets. Elle est dotée de fonctions d'import, soit depuis d'autres formats d'applications équivalentes, soit au travers d'un fichier CSV qui permet de mener des imports massifs plutôt que de saisir tous les éléments un a un dans les formulaires adhoc.
h3. A qui s'adresse ce manuel ?
-Ce manuel s’adresse aux utilisateurs de CHOUETTE. Les utilisateurs visés sont les collectivités locales Autorités Organisatrices de Transport (AOT), les exploitants des réseaux TC et leurs prestataires (bureaux d'étude ou société de services).
+Ce manuel s’adresse aux utilisateurs de CHOUETTE. Les utilisateurs visés sont les collectivités locales Autorités Organisatrices de Transport (AOT), les exploitants des réseaux TC et leurs prestataires (bureaux d'étude ou société de services).
D'autres utilisateurs potentiels sont également identifiés : services de l'état, éditeurs de logiciels, opérateurs de services d'information, chercheurs...
h3. Ce que vous trouverez dans ce manuel
-Vous trouverez dans ce document, toutes les informations nécessaires à la prise en main de l’application.
-Le manuel couvre la version 3.0.0.
+Vous trouverez dans ce document, toutes les informations nécessaires à la prise en main de l’application.
+Le manuel couvre la version 3.2.0.
diff --git a/app/views/help/journey_patterns.textile b/app/views/help/journey_patterns.textile
index 7224d1f6c..77cc4d2e2 100644
--- a/app/views/help/journey_patterns.textile
+++ b/app/views/help/journey_patterns.textile
@@ -5,7 +5,7 @@ title: Missions
h3. Définition
-Une _"Mission"_ est une sélection ordonnée d'arrêts issue d'une séquence d'arrêts de à partir de laquelle il sera possible de créer des courses, c'est à dire d'associer différents horaires à la mission. Les arrêts de la mission sont tout ou partie des arrêts de la séquence d'arrêts.
+Une _"Mission"_ est une sélection ordonnée d'arrêts issue d'une séquence d'arrêts de à partir de laquelle il sera possible de créer des courses, c'est à dire d'associer différents horaires à la mission. Les arrêts de la mission sont toute ou partie des arrêts de la séquence d'arrêts.
Une mission est spécifique à une _"séquence d'arrêts"_. Une même séquence d'arrêts peut contenir plusieurs missions différentes.
@@ -17,7 +17,7 @@ La création d'une mission se fait depuis la page d'une séquence d'arrêt. Pour
En bas du formulaire les arrêts sélectionnés dans la séquence d'arrêts sont sélectionnables par des cases à cocher.
-!2014-10-31_113803.png!
+p=. !2014-10-31_113803.png!
Sélection des arrêts d'une mission
h3. Modifier une mission
diff --git a/app/views/help/lines.textile b/app/views/help/lines.textile
index 44f6f049b..38096e860 100644
--- a/app/views/help/lines.textile
+++ b/app/views/help/lines.textile
@@ -11,7 +11,7 @@ La ligne dispose d'un identifiant fonctionnel, une sorte de _"numéro d'enregist
h4. Liste des groupes de lignes
-Sélectionner _"Lignes"_ dans le menu _"Données"_ affiche la liste des lignes existantes dans l'espace de données.
+Sélectionner _"Lignes"_ dans le menu _"Données"_ affiche la liste des lignes existants dans l'espace de données.
h4. Ajouter une ligne
@@ -19,7 +19,7 @@ Depuis la liste des groupe de lignes, cliquer sur _"Ajouter une ligne"_ dans la
Un formulaire s'affiche. Les champs obligatoires sont signalés par des astérisques.
-Dans le champ, _"Groupes de lignes associés"_, saisir les premiers caractères d'une ligne. L'auto-complétion présentera les groupes de lignes correspondant à la saisie. Taper sur _"Entrée"_ valide la proposition. Il est à noter que ces associations fonctionnent dans les deux sens et qu'il est également possible de rajouter une ligne dans un groupe de lignes depuis la page d'un groupe de lignes.
+Dans le champs, _"Groupes de lignes associés"_, saisir les premiers caractères d'une ligne. L'auto-complétion présentera les groupes de lignes correspondant à la saisie. Taper sur _"Entrée"_ valide la proposition. Il est à noter que ces associations fonctionnent dans les deux sens et qu'il est également possible de rajouter une ligne dans un groupe de ligne depuis la page d'un groupe de lignes.
h4. Afficher une ligne existante
@@ -37,10 +37,10 @@ En bas de la page, un lien _"Liste des arrêts de la ligne"_ affiche la liste de
Les arrêts des différentes séquences d'arrêts apparaissent sur la cartographie. Une infobulle permet de connaître le nom de l'arrêt et rappelle le type d'arrêt.
-!2014-10-31_112140.png!
+p=. !2014-10-31_112140.png!
Vue d'une ligne.
-h4. Modifier une ligne
+h4. Modifier une lignes
On peut modifier une ligne en cliquant sur le bouton de modification directement depuis la liste des lignes ou depuis la page d'une ligne particulière.
@@ -58,7 +58,7 @@ h3. Attributs d'une ligne
* Nom public : nom de la ligne connu des usagers
* Numéro d'enregistrement : code référençant une ligne au sein d'une autorité supérieure
* Indice : indice ou numéro de la ligne (ce champ n'est pas obligatoirement numérique). Il s'agit de la désignation simple de la ligne comme par exemple un numéro, une lettre etc...
-* Mode de transport : mode de transport principal de la ligne. Le cas échéant, d'autres modes de transport particuliers peuvent être indiqués au niveau de chaque course.
+* Mode de transport : mode de transport principal de la ligne. Le cas échéant, d'autres modes de transports particuliers peuvent être indiqués au niveau de chaque course.
* Couleur du tracé : couleur en rvb hexadécimal du tracé de ligne et du fond de texte
* Couleur de texte : couleur en rvb hexadécimal du texte du nom de la ligne
* Page web associée : adresse http ou https de la page du site public décrivant la ligne
diff --git a/app/views/help/metadata.textile b/app/views/help/metadata.textile
index a8c1cf405..d7193ef11 100644
--- a/app/views/help/metadata.textile
+++ b/app/views/help/metadata.textile
@@ -5,7 +5,7 @@ title: Métadonnées
Tous les éléments définis dans CHOUETTE sont identifiés par des métadonnées Neptune spécifiques. Ces métadonnées peuvent être générées automatiquement à la création de l'objet de telle sorte qu'il n'est pas nécessaire de les renseigner. Il reste toutefois possible de leur attribuer une valeur manuellement si nécessaire.
-Chaque type est identifié par une clé qui permet de déterminer quel est sa nature (arrêt, ligne, transporteur etc...). La norme propose des clés types qui sont résumées dans le tableau ci-dessous.
+Chaque type est identifié par une clé qui permet de déterminer quel est sa nature (arrêt, ligne, transporteur etc...). La norme suggère des clés types qui sont résumées dans le tableau ci-dessous.
h3. Métadonnées d'un transporteur
@@ -17,8 +17,7 @@ h3. Métadonnées d'un transporteur
* Version : version de l'objet (auto incrémenté à chaque modification)
* Créé par : compte utilisateur ayant procédé à la dernière modification
-!2014-10-30_175715.png!
-Exemple d'identifiant Neptune
+!2014-10-30_175715.png! Exemple d'identifiant Neptune
h3. Clés
diff --git a/app/views/help/navigation.textile b/app/views/help/navigation.textile
index 38a6027d2..89ca32ba5 100644
--- a/app/views/help/navigation.textile
+++ b/app/views/help/navigation.textile
@@ -16,18 +16,20 @@ Le bandeau supérieur regroupe l'essentiel des liens de navigation :
* Les préférences utilisateurs, notamment le choix de langue et les paramètres du compte.
!2014-10-30_173410.png!
-Bandeau supérieur de CHOUETTE
+
+p=. Bandeau supérieur de CHOUETTE
h3. Listes d'éléments
Les listes prennent la forme de "_boites_" rangées côte à côte. Dans le cas où le titre de l'élément est trop long pour être affiché entièrement, une infobulle complète apparaît au survol du titre.
-Les éléments de l'application qui apparaissent sous la forme de liens sont ceux qui peuvent faire l'objet d'un paramétrage détaillé. Ils s'accompagnent dans les listes de pictogrammes de modification et de suppression.
+Les éléments de l'application qui apparaissent sous la forme de liens sont ceux qui peuvent faire l'objet d'un paramétrage détaillés. Il s'accompagnent dans les listes de pictogrammes de modification et de suppression.
Le pictogramme de modification ne concerne que les propriétés générales de l'élément et non pas les informations spécifiques qu'il regroupe. Il faut cliquer sur le lien proprement dit pour pouvoir consulter et éditer les informations correspondantes. Le pictogramme de suppression permet de supprimer effectivement toutes les informations correspondant à l'élément.
!2014-10-30_173506.png!
-Exemple de liste d'éléments
+
+p=. Exemple de liste d'éléments
Les listes d'éléments peuvent dans certains cas être réduites afin de ne pas surcharger la page. Cliquer sur le titre de la liste permet d'afficher la liste des éléments.
@@ -36,7 +38,26 @@ h3. Fonctions d'édition
Les fonctions d'édition des données proprement dites se situent à droite de l'affichage principal.
!2014-10-30_173604.png!
-Fonctions d'édition des arrêts
+
+p=. Fonctions d'édition des arrêts
+
+h3. Cartographie
+
+Les éléments géolocalisés sont affichés sur une cartographie. Il est possible de naviguer dans la cartographie à l'aide de la souris avec un cliquer-glisser pour faire défiler la cartographie et avec la molette pour zoomer ou dé-zoomer. Ces fonctions sont également disponibles par les boutons affichés sur la cartographie.
+
+Le fond cartographique par défaut est la vue aérienne du géoportail mais il est possible de sélectionner un autre fond cartographique de son choix en cliquant sur le petit "_+_" situé à droite de la cartographie.
+
+Il est possible d'afficher la cartographie en plein écran en cliquant sur le pictogramme correspondant. Il suffit de recliquer sur le pictogramme pour sortir de la vue plein écran. Cliquer sur l'une des ces fonctionnalités fait repasser la vue cartographique dans son format normal.
+
+!2015-12-17_172522.png!
+
+p=. Affichage de la cartographie en plein écran.
+
+Lorsqu'on est en vue plein écran, les fonctionnalités habituellement présentes dans le bandeau latéral de gauche sont disponibles dans une menu spécifique qui s'affiche au clic.
+
+!2015-12-17_173615.png!
+
+p=. Affichage du menu des fonctions
h3. Pointage et déplacement d'un objet sur la cartographie
@@ -48,21 +69,24 @@ CHOUETTE permet de déplacer élément, arrêt ou accès par exemple, sur la car
* de cliquer sur la carte permet de sortir du mode déplacement et de finaliser le déplacement en mettant les coordonnées à jour dans le formulaire
!2014-10-30_173740.png!
-Déplacement d'un arrêt sur la cartographie
+
+p=. Déplacement d'un arrêt sur la cartographie
h3. Auto-complétion
-De nombreux champs de CHOUETTE font appel à des fonctions d'auto-complétion de telle sorte que des caractères saisis dans le champ font automatiquement remonter des éléments pertinents déjà connus du système.
+De nombreux champs de CHOUETTE font appel à des fonctions d'auto-complétion de telle sorte que des éléments saisis dans le champs font automatiquement remonter des éléments pertinents déjà connus du système.
!2014-10-30_173913.png!
-Auto-complétion sur la sélection d'un arrêt.
+
+p=. Auto-complétion sur la sélection d'un arrêt.
h3. Architecture de l'interface de CHOUETTE
-Un certain nombre d'éléments constitutifs de la base de données sont accessibles en tant que sous éléments de menus accessibles depuis une page. Il en va ainsi par exemple des horaires, qui sont accessibles au travers des lignes puis des séquences d'arrêts. Il est conseillé à l'utilisateur débutant de se reporter au chapitre _"Créer un réseau à partir de zéro"_ situé en annexe pour un rappel de l'ordre dans lequel il faut créer les éléments du réseau.
+Un certain nombre d'éléments constitutifs de la base de données sont accessibles en tant que sous éléments de menus accessibles depuis une page. Il en va ainsi par exemple des horaires qui sont accessibles au travers des lignes puis des séquences d'arrêts. Il est conseillé à l'utilisateur débutant de se reporter au chapitre _"Créer un réseau à partir de zéro"_ situé en annexe pour un rappel de l'ordre dans lequel il faut créer les éléments du réseau.
!navigation.png!
-Navigation au sein de l'application CHOUETTE
+
+p=. Navigation au sein de l'application CHOUETTE
diff --git a/app/views/help/parametersets.textile b/app/views/help/parametersets.textile
index 6070d86b1..f3cc61e87 100644
--- a/app/views/help/parametersets.textile
+++ b/app/views/help/parametersets.textile
@@ -5,18 +5,18 @@ title: Jeux de paramètres de validation
h3. Définition
-CHOUETTE intègre un outil de validation de la base de données qui permet de détecter les erreurs les plus grossières qui auraient pu être laissées dans la base de données. Un ensemble de tests est disponible mais il n'est pas obligatoire de les passer tous. L'utilisateur peut créer son propre jeu de tests au travers d'un _"jeu de paramètres"_ dans le menu validation.
+CHOUETTE intègre un outil de validation de la base de données qui permet de détecter les erreurs les plus grossières qui auraient pu être laissée dans la base de données. Un ensemble de tests est disponible mais il n'est pas obligatoire de les passer tous. L'utilisateur peut créer son propre jeu de tests au travers d'un _"jeu de paramètres"_ dans le menu validation.
Les paramètres de tests peuvent donc être choisis afin d'adapter les tests à la réalité du terrain.
Afin de rejouer facilement les tests dans différent contextes, il est possible de définir plusieurs jeux qui sont conservés indépendamment des validations.
-Un jeu de paramètres est proposé par défaut à la création du référentiel; celui-ci peut être modifié ou détruit; il n'est alors pas possible de le recréer.
+Un jeu de paramètre est proposé par défaut à la création du référentiel; celui-ci peut être modifié ou détruit; il n'est alors pas possible de le recréer.
h3. Paramètres généraux
* Nom : Nom du jeu de données (nom utilisé pour sa sélection dans les imports et validations)
-* Délimitation géographique des arrêts : Emprise géographique du réseau (tous les arrêts testés devront être inclus dans cette zone). Le format de ce champs est un ensemble de points formant une polyligne fermée:[[longitude1,latitude1],[longitude2,latitude2],,,[longitudeN,latitudeN],[longitude1,latitude1]], Les longitudes et latitudes sont exprimées en degrés, décimaux, positifs à l'est et au nord. Il s'agit du format WGS84 normé également utilisé dans GoogleMaps ou Open Street Map.
+* Délimitation géographique des arrêts : Emprise géographique du réseau (tous les arrêts testés devront être inclus dans cette zone). Le format de ce champs est un ensemble de points formant une polyligne fermée:[[longitude1,latitude1],[longitude2,latitude2],,,[longitudeN,latitudeN],[longitude1,latitude1]], Les longitudes et latitudes sont exprimées en degré, décimaux positifs à l'est et au nord. Il s'agit du format WGS84 normé également utilisé dans googlemaps ou open street map.
* Durée maximum de stationnement à un arrêt (en secondes) := écart de temps maximal autorisé entre l'heure d'arrivée et l'heure de départ à un arrêt
p. *Distance minimum entre :* (en mètres)
@@ -34,50 +34,22 @@ p. *Distance maximum entre :* (en mètres)
p. *Vitesse de marche maximum d'un voyageur :* (en kilomètres/heure)
vitesse maximale admise dans les correspondances et les liaisons arrêt - accès pour :
-* un voyageur ordinaire : voyageur qui a une connaissance théorique du réseau
+* un voyageur ordinaire : voyageur qui a un connaissance théorique du réseau
* un voyageur occasionnel : voyageur qui ne connaît pas le réseau
* un voyageur habituel : voyageur qui connaît bien le réseau
* un voyageur à mobilité réduite : voyageur qui a des difficultés de déplacement
-p. *Activation de contrôles supplémentaires* (ceux-ci sont alors déclarés bloquants)
-
-* contraite d'appartenance d'une ligne à un unique groupe de lignes.
-* limitation du nombre de séquences d'arrêts d'une ligne à au plus 1 A/R)
-* appartenance obligatoire des arrêts physiques à un arrêt commercial
-* limiter les correspondances aux seuls arrêts physiques
-* limiter les modes de transports à un sous-ensemble des modes gérés par Chouette (si ce contrôle est activé, une case à cocher est ajouter par mode de transport pour l'autoriser)
h3. Paramètres par mode de transport.
p. les paramètres suivants sont à définir pour chaque mode de transport disponible dans le réseau à tester.
-* Autoriser ce mode (si le contrôle sur les modes de transports est actif)
* Distance minimum entre 2 arrêts (en mètres) : distance minimale de parcours d'un véhicule entre 2 arrêts.
* Distance maximum entre 2 arrêts (en mètres) : distance maximale de parcours d'un véhicule entre 2 arrêts.
* Vitesse minimum (en kilomètres/heure) : vitesse minimale attendue entre 2 arrêts d'une course
* Vitesse maximum (en kilomètres/heure) : vitesse maximale attendue entre 2 arrêts d'une course
* Écart maximum de durée de trajet entre 2 arrêts successifs pour les différentes courses (en secondes) : la différence de temps de trajet entre 2 arrêts successifs de 2 courses d'une même mission ne doit pas dépasser ce seuil =:
-h3. Contrôles sur les attributs du modèle
-
-p. les paramètres suivants sont disponible pour fixer des limitations sur différents champs du modèle par rapport à leur spécification dans Chouette; ces contrôles s'applique sur l'ensemble des données fournies à la validation.
-
-p. pour activer un point de contrôle, il faut cocher le type d'objet, puis renseigner les limitations sur les attributs désirés.
-
-p. les limitations sont les suivantes :
-
-* Unicité : contrôle de l'unicité de la valeur dans le lot de données contrôlées.
-* Caractères autorisés : restriction possible des valeurs à :
-** uniquement des chiffres, (restriction imposée pour un champ numérique)
-** uniquement des lettres (pas d'espace)
-** uniquement des lettres majuscules (pas d'espace)
-** uniquement des lettres minuscules (pas d'espace)
-* obligation d'un nombre minimal de caractères ou valeur minimale pour un champ numérique ou contraint à des chiffres
-** en mettant 1 dans ce champs pour un texte, ceci le rend obligatoire
-* restriction à une longueur maximale de caractères ou valeur maximale pour un champ numérique ou contraint à des chiffres
-
-p. L'attribut *Identifiant Neptune* est un cas particulier, les limitations s'appliquent à la troisième composante de ce champ, soit la partie identifiant technique.
-
h3. Remarques
p. Les distances sont calculées _à vol d'oiseau_ et les vitesses sont déterminées par rapport à ces distances.
diff --git a/app/views/help/relationship.textile b/app/views/help/relationship.textile
index 41bbf756f..334cc6633 100644
--- a/app/views/help/relationship.textile
+++ b/app/views/help/relationship.textile
@@ -7,7 +7,7 @@ h3. Regroupements des différents niveaux d'arrêts
Les arrêts de différents niveaux hiérarchiques peuvent être liés ensemble.
-Ainsi, on obtient les possibilités de regroupements suivants:
+Ainsi on obtient les possibilités de regroupements suivants:
* un arrêt physique regroupe plusieurs arrêts sur itinéraire (ou séquence d'arrêts).
* un arrêt commercial regroupe plusieurs arrêts physiques (quai, embarquement).
@@ -18,12 +18,11 @@ Pour ne pas aboutir à un système trop complexe, les règles suivantes sont pos
* un pôle d'échange peut contenir des arrêts commerciaux et/ou des pôles d'échanges (qui ne peuvent pas en contenir d'autres).
* un arrêt commercial ne peut contenir que des arrêts physiques.
-!2014-10-30_180536.png!
-Exemple d'arrêt commercial contenant un arrêt physique
+!2014-10-30_180536.png! Exemple d'arrêt commercial contenant un arrêt physique
h3. Création et modification des relations de parenté
-Les liens de parenté entre les arrêts se créent depuis un arrêt déjà existant, qu'il soit parent ou fils. Il peut s'agir de mettre en relation deux arrêts déjà existants ou bien de créer un nouvel arrêt en relation à partir de l'arrêt courant.
+Les liens de parentalité entre les arrêts se créent depuis un arrêt déjà existant, qu'il soit parent ou fils. Il peut s'agir de mettre en relation deux arrêts déjà existants ou bien de créer un nouvel arrêt en relation à partir de l'arrêt courant.
* Gérer le parent : Cette fonction affiche soit un champ de recherche pour rechercher et définir le parent si le lien n'existe pas encore, soit le nom du parent pour consultation avec une petite croix pour supprimer le lien de parenté si le lien est déjà établi. Supprimer le lien de parenté ne supprime pas l'arrêt proprement dit.
* Cloner pour créer un père : Cette fonction crée un arrêt identique de niveau hiérarchique supérieur.
@@ -36,14 +35,13 @@ h4. Depuis les niveaux _"point d'embarquement"_ ou _"quai"_
Les niveaux _"point d'embarquement"_ et _"quai"_ étant les plus bas, ils ne peuvent pas être reliés à des arrêts fils. En conséquence seul un bouton _"Gérer le parent"_ est systématiquement disponible. Le bouton _"cloner pour créer un père"_ apparaît s'il existe déjà un arrêt parent.
-!2014-10-30_180955.png!
-Gestion d'un arrêt parent
+!2014-10-30_180955.png! Gestion d'un arrêt parent
h4. Depuis le niveau _"arrêt commercial"_ ou _"Pôle d'échange"_
!commercialstoppoint.png! ou !stopplace.png!
-Ces deux niveaux permettent à la fois de définir de nouveaux fils et de rattacher l'arrêt commercial à un parent de type "pôle d'échange". Ils disposent donc à la fois des fonctions de gestion et de clonage de parents et de fils. A noter que les arrêts de niveaux pôle d'échange (qui sont hiérarchiquement les plus élevés) peuvent avoir un et un seul autre pôle d'échange comme parent. Deux pôles d'échange peuvent être parents l'un de l'autre.
+Ces deux niveaux permettent à la fois de définir de nouveaux fils et de rattacher l'arrêt commercial à un parent de type "pôle d'échange". Ils disposent donc à la fois des fonctions de gestion et de clonage de parents et de fils. A noter que les arrêts de niveaux pôle d'échange qui sont hiérarchiquement les plus élevés peuvent avoir un et un seul autre pôle d'échange comme parent. Deux pôles d'échange peuvent être parents l'un de l'autre.
!2014-10-30_181044.png!
Gestion de relation père-fils depuis un arrêt commercial \ No newline at end of file
diff --git a/app/views/help/route_sections.textile b/app/views/help/route_sections.textile
new file mode 100644
index 000000000..4cd6bf93f
--- /dev/null
+++ b/app/views/help/route_sections.textile
@@ -0,0 +1,92 @@
+---
+layout: default
+title: Tracés
+---
+
+CHOUETTE permet d'éditer le tracé de ligne sur la cartographie. Le tracé est defini au niveau de la "mission":/journey_patterns . Chaque trajet entre deux arrêts est défini séparément.
+
+Les tracés définis entre deux arrêts pour une mission peuvent être récupérés pour une autre mission. Il est possible de définir autant de tracés entre deux arrêts que nécessaire.
+
+L'application dispose d'un moteur de recherche d'itinéraire qui établi un trajet par défaut. Il peut également être utilisé pour faciliter le tracé manuel, l'utilisateur plaçant les principaux points de son tracé, le moteur se chargeant de les relier en suivant les voiries (et en tenant compte des sens de circulation).
+
+Il est à noter que seul le format GTFS sait gérer les tracés aussi bien en import et en export.
+
+h3. Création d'un nouveau tracé
+
+h4. Accès à l'interface de tracé
+
+Créer un nouveau tracé se fait dans le menu d'une mission. Un lien de modification du tracé est disponible dans le menu latéral. Tant que le tracé n'est pas entièrement défini, le lien apparaît en orange avec un panneau d'alerte.
+
+!2016-01-08_163438.png!
+
+p=. Accès à la modification d'un tracé
+
+La page de modification d'un tracé liste toutes les sections de la mission. Il s'agit du trajet entre deux arrêts de la mission. Le tracé est entièrement défini à partir du moment où toutes les sections bénéficient d'un tracé.
+
+Pour chaque section, un menu déroulant liste les tracés disponibles avec la distance et éventuellement le nombre de _via_. Lorsque seule la distance est visible, cela signifie que le tracé a été généré automatiquement par le calculateur d'itinéraire. Si des vias sont indiqués, cela signifie que le tracé a été établi à partir de points définis par l'utilisateur.
+
+!2016-01-08_163715.png!
+
+p=. Liste des tracés
+
+Pour créer un tracé sur une section n'en disposant pas encore, il convient de cliquer sur _Ajouter une alternative_. A ce stade, le pictogramme en forme de crayon est grisé puisqu'il n'existe pas encore de tracé à modifier.
+
+h4. Choix du traitement de la géométrie
+
+Après avoir cliqué le lien d'ajout d'une alternative, la cartographie s'affiche avec le trajet proposé automatiquement par le calculateur d'itinéraire en bleu et une ligne droite entre les deux arrêts en vert. Côté menu, les poitns de départ et d'arrivée sont indiqués sur le côté et un menu déroulant permet de choisir le traitement de la géométrie. Deux options sont possibles :
+
+* Standard : Le calculateur d'itinéraire recherche le trajet le plus court en respectant le cas échéant les points définis par l'utilisateur.
+* Pas de traitement : le calculateur n'est pas utilsé, le parcours correspondra très exactement au tracé fait manuellement par l'utilisateur.
+
+h4. Création du tracé
+
+Lors de la création d'un nouveau tracé, la ligne bleue correspondant à la proposition du calculateur ne peut pas être éditée. Si le tracé calculé par défaut convient, il suffit de le valider sans éditer le moindre point.
+
+Dans le cas contraire, il est possible de cliquer sur la ligne verte qui change alors de couleur pour devenir rouge. Chaque extrémité est marquée par un pictogramme rond de couleur verte qui signale une étape du tracé. Au centre du tracé se trouve un point identique mais semi-transparent que l'on peut faire glisser sur la carte pour raffiner le tracé. Chaque posistionnement du point fait automatiquement apparaître un nouveau point éditable de chaque côté de la section, ce qui permet de dessiner un tracé de plus en plus précis.
+
+Il est recommandé de commencer son tracé sur les grosses étapes puis de raffiner le trajet en replaçant les points et en créant de nouvelles étapes afin d'avoir le prochain point du tracé à portée de souris.
+
+Le traitement de la géométrie permet de ne pas tracer le trajet dans le moindre détail. Il suffit de placer quelques points significatifs et de valider en conservant _standard_ comme traitement de géométrie pour que le trajet soit calculé en passant par les points définis. Attention, le calculateur cherche une solution en fonction des voiries auxquelles sont associés les points placés. Si l'un d'entre-eux est effectivement associé à une mauvaise voirie, le calculateur risque de faire faire de gros détours pour satisfaire la demande. En conséquence il est déconseillé de placer les points directement sur les carrefous pour éviter que le point soit associé à une voirie non désirée.
+
+Dans le cas d'un tracé entièrement défini à la main, il convient de choisir _pas de traitement_ dans le menu de traitement de la géométrie.
+
+Finalier la sélection des tracés se fait en cliquant sur le bouton _modifier le parcours_ en bas de la page.
+
+!2016-01-08_165558.png!
+
+p=. Placement des points d'un tracé.
+
+h3. Modifier un tracé
+
+Une fois le tracé créé, il est possible de sélectionner un autre tracé ou de modifier un tracé. Le menu déroulant sur la liste des sections permet de sélectionner le tracé que l'on va retenir, soit pour l'affecter, soit pour le modifier.
+!2016-01-08_170524.png!
+
+p=. Séléction d'un tracé
+
+Dès lors qu'un tracé a été créé, il est possible de le modifier. Il suffit pour cela de cliquer sur le pictogramme représentant un crayon. Sur la page d'édition du tracé, il s'affiche dans une couleur violette. Double cliquer sur le tracé permet de le faire passer en mode édition. Il redevient bleu avec des cercles organges déplaçables correspondants à chacun des points du parcours. Lorsqu'on édite les points du tracé, le tracé intial reste visible en dessous en bleu.
+
+!2016-01-08_175148.png!
+
+p=. Tracé à modifier
+
+!2016-01-08_175340.png!
+
+p=. Tracé en mode édition
+
+Modifier le tracé se fait en déplaçant les points qui le composent. Si le traitement de la géométrie est paramété en _Standard_, un nouveau trajet est calculé en fonction des modifications apportées au tracé. Dans le cas inverse, le tracé est modifié en fonction de ce qui a été tracé par l'utilisateur.
+
+Il est également possible de visualiser et de modifier un tracé en passant par le sous-menu _Sections de parcours_ du menu _données_.
+
+h3. Supprimer un tracé
+
+La suppresion des tracés se fait dans un sous-menu spécifique du menu _données_. Il dispose de champs de recherche qui permettent de retrouver les sections à éditer pour les consulter, les modifier et les supprimer.
+
+!2016-01-08_180432.png!
+
+p=. gestion des tracés par section.
+
+La supression se fait en cliquant sur le pictogramme poubelle dans le tableau ou dans la page de détail de la section de parcours après avoir cliqué sur le bouton _Voir_.
+
+!2016-01-08_180930.png!
+
+p=. Visualisation, modification et suppresion de tracé
diff --git a/app/views/help/routes.textile b/app/views/help/routes.textile
index 0396898ae..7938169a2 100644
--- a/app/views/help/routes.textile
+++ b/app/views/help/routes.textile
@@ -24,11 +24,11 @@ h3. Créer une séquence d'arrêts
La création d'une séquence d'arrêts se fait depuis la page d'une ligne. Pour créer une séquence d'arrêt il convient de cliquer sur _"Ajouter une séquence d'arrêts"_ dans le menu latéral à droite. Un formulaire de création s'affiche alors.
-En bas du formulaire, deux liens permettent soit de rajouter des arrêts à la séquence, soit de créer un nouvel arrêt pour le rajouter à la séquence.
+En bas du formulaire deux liens permettent soit de rajouter des arrêts à la séquence, soit de créer un nouvel arrêt pour le rajouter à la séquence.
h4. Créer un nouvel arrêt pour l'ajouter
-Cliquer sur créer un nouvel arrêt renvoie l'utilisateur à la page de création d'arrêt. Il est à noter qu'il devra retourner par lui même dans sur l'écran de création de séquence d'arrêt pour reprendre son travail.
+Cliquer sur créer un nouvel arrêt renvoie l'utilisateur à la page de création d'arrêt. Il est à noter qu'il devra retourner par lui même dans sur l'interface de création de séquence d'arrêt pour reprendre son travail.
h4. Ajouter un arrêt
@@ -38,7 +38,7 @@ Le pictogramme en forme de poubelle en début de ligne permet de supprimer l'ét
Le pictogramme en forme de flèches (dans les 4 directions) permet de modifier l'ordre des arrêts dans la séquence. Il faut bien entendu au moins deux arrêts pour pouvoir modifier l'ordre des arrêts.
-Une fois qu'un arrêt est sélectionné, une petite croix apparaît au bout de la zone contenant le nom de l'arrêt. Cliquer sur cette croix efface l'arrêt sélectionné et permet d'en saisir un nouveau.
+Une fois qu'un arrêt est sélectionné, une petite croix apparait au bout de la zone contenant le nom de l'arrêt. Cliquer sur cette croix efface l'arrêt sélectionné et permet d'en saisir un nouveau.
h3. Modifier une séquence d'arrêts
@@ -47,25 +47,9 @@ On peut modifier une séquence d'arrêts en cliquant sur le bouton de modificati
!2014-10-31_112543.png!
Modification des arrêts d'une séquence
-h3. Contraintes de montée - descente
-
-On peut ajouter des règles de montée ou de descente aux arrêts de la séquence d'arrêt (interdit ou à la demande); ces règles s'appliquent à toutes les courses de la séquence d'arrêt
-
-Les règles sont :
-
-* Non défini (par défaut)
-* Montée autorisée
-* Montée interdite
-* Montée sur réservation
-* Montée sur demande au conducteur
-* Descente autorisée
-* Descente interdite
-* Descente sur réservation
-* Descente sur demande au conducteur
-
h3. Supprimer une séquence d'arrêts
-Il est possible de supprimer une séquence d'arrêts depuis la page de la ligne. Chaque élément de la liste des séquences d'arrêts en bas de la page est dotée d'un pictogramme de suppression. Il est à noter que la suppression de la séquence d'arrêts ne supprime par les arrêts qu'elle contient.
+Il est possible de supprimer une séquence d'arrêt depuis la page de la ligne. Chaque élément de la liste des séquences d'arrêt en bas de la page est dotée d'un pictogramme de suppression. Il est à noter que la suppression de la séquence d'arrêts ne supprime par les arrêts qu'elle contient.
La suppression de la séquence est également possible depuis la page de la séquence elle-même. Le lien _"Supprimer cette séquence d'arrêts"_ efface la séquence courante.
diff --git a/app/views/help/startingfromscratch.textile b/app/views/help/startingfromscratch.textile
index ef5586eb3..3188ddb39 100644
--- a/app/views/help/startingfromscratch.textile
+++ b/app/views/help/startingfromscratch.textile
@@ -5,7 +5,7 @@ title: Créer un réseau à partir de zéro
h3. Créer un nouvel espace de données
-Chaque réseau est généralement intégré dans un espace de données spécifique. Dans le cas où l'on cherche à créer une nouvelle ligne par exemple, on devra créer les éléments dans l'espace de données correspondant.
+Chaque réseau est généralement intégré dans un espace de donnée spécifique. Dans le cas où l'on cherche à créer une nouvelle ligne par exemple, on devra créer les éléments dans l'espace de données correspondant.
h3. Définir les attributs du réseau
@@ -21,21 +21,23 @@ Navigation au sein de l'application CHOUETTE
h3. Création des calendriers
-Les calendriers sont associés aux courses. Ils devront donc être créés avant l'étape de création des courses. Ils nécessitent généralement un travail de mise à plat en fonction des horaires tels qu'ils ont été conçus. Un calendrier étant une série de dates permettant de couvrir à la fois les plages de dates et les jours de la semaine auxquels la course fonctionne, il n'est pas rare que la création d'un nouveau réseau nécessite un nombre important de calendriers. Les fonctions d'étiquettes permettent de mieux les organiser dans CHOUETTE, toutefois, une étape préalable de conception des calendriers est généralement nécessaire pour saisir un nouveau réseau avec rigueur.
+Les calendriers sont associés aux courses. Ils devront donc être créés avant l'étape de création des courses. Ils nécessitent généralement un travail de mise à plat en fonction des horaires tels qu'ils ont été conçus. Un calendrier étant une série de date permettant de couvrir à la fois les plages de dates et les jours de la semaine auxquels la course fonctionne, il n'est pas rare que la création d'un nouveau réseau nécessite un nombre important de calendriers. Les fonctions d'étiquettes permettent de mieux les organiser dans CHOUETTE, toutefois, une étape préalable de conception des calendriers est généralement nécessaire pour saisir un nouveau réseau avec rigueur.
h3. Création des arrêts et des correspondances
-Les arrêts du réseaux peuvent ensuite être créés, soit directement par saisie dans le formulaire de CHOUETTE, soit par import. Dans l'hypothèse où le nouvel espace de données reprend des arrêts déjà existants dans un autre espace de données, il est possible de les exporter, de les compléter pour les réimporter ensuite.
+Les arrêts du réseaux peuvent ensuite être créés, soit directement par saisie dans le formulaire de CHOUETTE,soit par import. Dans l'hypothèse où le nouvel espace de donnée reprend des arrêts déjà existants dans un autre espace de données, il est possible de les exporter, de les compléter pour les réimporter ensuite.
-Les correspondances étant des liens entre deux arrêts, il est possible de les déclarer dès l'étape de création des arrêts.
+Les correspondances étant des liens entre deux arrêts il est possible de les déclarer dès l'étape de création des arrêts.
+
+Une descrption détaillée de la façon de créer les arrêts et les correspondances massivement depuis en important des fichiers GTFS est disponible dans l'annexe "Importer massivement des arrêts depuis un fichier GTFS":GTFS_stops_import.
h3. Création des lignes
-La création des lignes permet de définir les grands paramètres généraux de la ligne, notamment son nom. Les arrêts proprement dits sont définis dans les séquences d'arrêts.
+La création des lignes permet de définir les grands paramétres généraux de la ligne, notamment son nom. Les arrêts proprement dits sont définis dans les séquences d'arrêts.
h4. Séquences d'arrêts
-A l'intérieur de l'écran pour la ligne, l'étape suivante consiste à définir les séquences d'arrêts . Celles-ci sont constituées d'un ensemble d'arrêts ordonnés qui permettront de déterminer une ou plusieurs missions , c'est à dire un sous-ensemble de la séquence d'arrêts comportant tout ou partie de ses arrêts.
+A l'intérieur de l'interface de ligne, l'étape suivante consiste à définir les séquences d'arrêts . Celles-ci sont constituées d'un ensemble d'arrêts ordonnés qui permettront de déterminer une ou plusieurs missions , c'est à dire un sous-ensemble de la séquence d'arrêts comportant tout ou partie de ses arrêts.
Typiquement, une ligne aura deux séquences d'arrêts, une par sens de circulation. Il est tout à fait possible d'en créer d'autres, y compris avec des arrêts totalement différents d'une séquence à l'autre.
@@ -43,19 +45,22 @@ h4. Missions
Les missions définissent des trajets effectifs réalisés par les véhicules. Elles se définissent à l'intérieur de l'interface de gestion des séquences d'arrêts, elle-même étant un sous-élément de l'interface des lignes.
-On peut créer autant de missions que nécessaire au sein d'une séquence d'arrêts. Chaque mission est néanmoins contrainte par les arrêts composant la séquence d'arrêts, à la fois en ce qui concerne les arrêts eux-mêmes que l'ordre dans lequel ils sont agencés.
+On peut créer autant de missions que nécessaire au sein d'une séquence d'arrêts. Chaque mission est néanmoins contrainte par les arrêts composant la séquence d'arrêts, à la fois par ce qui concerne les arrêts eux-mêmes que par l'ordre dans lequel ils sont agencés.
h3. Horaires
-Les horaires ne peuvent être définis qu'à la condition d'avoir paramétré les éléments précédents. L'interface de consultation et de saisie des horaires se situe au niveau de la mission. Pour retrouver les horaires, il convient donc de sélectionner Ligne>Séquence d'arrêts>Horaire des courses.
+Les horaires ne peuvent être définis qu'à la condition d'avoir paramétré les autres critères préalablement. L'interface de consultation et de saisie des horaires se situe au niveau de la mission. Pour retrouver les horaires, il convient donc de sélectionner Ligne>Séquence d'arrêts>horaire des courses.
+
+Les horaires des courses peuvent être saisis directement dans l'interface Chouette ou bien encore être édité dans un tableau par le biais de la fonction "d'import / export" spécifique. Disponible depuis l'interface des horaires, elle ne concerne que ceux-ci. Il ne faut pas la confondre avec les imports / exports de base de données dans le système. Il s'agit d'une fonction qui permet l'édition externe et les copier/coller massifs depuis un tableur.
+!2014-10-31_114422.png!
-Les horaires des courses peuvent être saisis directement dans l'interface Chouette ou bien encore être édités dans un tableau par le biais d'une fonction "d'import / export" spécifique. Disponible depuis l'interface des horaires, elle ne concerne que ceux-ci. Il ne faut pas la confondre avec les imports / export de base de données dans le système. Il s'agit d'une fonction qui permet l'édition externe et les copier/coller massifs depuis un tableur.
+Pour plus d'informations sur l'import/export des horaires, consulter le chapitre "Courses et horaires":vehicle_journeys ainsi que l'annexe "Exporter et importer des horaires en .csv":vehicle_journeys_import_export.
A noter que l'édition directement dans CHOUETTE peut se faire au clavier. Le curseur placé dans le premier champ, la saisie sur le pavé numérique permet de saisir la valeur voulue. La touche tabulation permet passer du champ heure au champ minute puis de renseigner la suite de la fiche en colonne. Les liens _"Copier arrivées vers départs"_ ou inversement permettent de dupliquer les données saisies dans le cas le plus fréquent où les horaires de départ et d'arrivé à l'arrêt sont confondus.
-L'export se fait au format .zip et comporte des fichiers CSV (.csv) des calendriers et des courses. Les versions modifiées doivent être uploadées en retour individuellement au format CSV. Il convient de ne surtout pas changer la structure des fichiers et de s'assurer que le format CSV n'ait pas été modifié par le tableur. Les saisies manuelles augmentant le risque d'erreur de saisie, il est fortement recommandé de valider les données après un import CSV dans le menu _"Validations"_.
+L'export se fait au format .zip et comporte des fichier .csv des calendriers et des courses. Les versions modifiées doivent être uploadées en retour individuellement au format .csv. Il convient de ne surtout pas changer la structure des fichiers et de s'assurer que le format .csv n'ait pas été modifié par le tableur. Les saisies manuelles augmentant le risque d'erreur de saisie, il est fortement recommandé de valider les données après un import .csv dans le menu _"Validations"_.
h3. Groupe de lignes
-Les groupes de lignes sont facultatifs et peuvent être créés dès lors que des lignes existent.
+Les groupes de lignes sont facultatifs et peuvent être créés dès lors que des lignes existent. Ils sont obligatoires dès lors que la base doit être exportée au format HUB. Pour plus d'informations sur les contraintes liées à l'export HUB, reportez vous au chapitre correspondant.
diff --git a/app/views/help/stop_areas.textile b/app/views/help/stop_areas.textile
index 77a07f493..fab4421dd 100644
--- a/app/views/help/stop_areas.textile
+++ b/app/views/help/stop_areas.textile
@@ -9,19 +9,22 @@ Le référentiel des arrêts constitue un maillon essentiel du réseau, et se co
On recense tout d'abord les arrêts physiques, qualifiés de _"point d'embarquement"_ ou de _"quai"_.
-Du fait de l'existence de deux concepts dans le schéma TRIDENT, cet arrêt physique sera considéré par l'application comme une _"zone d'arrêt de premier niveau"_. Cette notion est nécessaire pour gérer les _"points d'arrêt sur itinéraire"_ utilisés par certains réseaux.
+Du fait de l'existence de deux concepts dans le schéma TRIDENT, cet arrêt physique sera considéré par l'application comme une _"zone d'arrêt de premier niveau"_. Cette notion est nécessaire pour gérer les _"points d'arrêts sur itinéraire"_ utilisés par certains réseaux.
-L'application gère ensuite les points d'arrêt sur itinéraire à partir de ces arrêts physiques, en assurant le regroupement des points d'arrêt sur itinéraire dans un arrêt physique. Cela permet notamment de prendre en compte les cas de plusieurs lignes passant par le même arrêt physique.
+L'application gère ensuite les points d'arrêts sur itinéraire à partir de ces arrêts physiques, en assurant le regroupement des points d'arrêt sur itinéraire dans un arrêt physique. Cela permet notamment de prendre en compte les cas de plusieurs lignes passant par le même arrêt physique.
-Par la suite, on peut regrouper deux (ou plus) arrêts physiques au sein d'un _"arrêt commercial"_. Cela permet par exemple de regrouper les points d'arrêt physiques correspondant à deux poteaux d'arrêt de la même ligne situés de part et d'autre d'une chaussée mais aussi de regrouper l'ensemble des points d'arrêt physiques d'une gare routière, pour lesquels on considère que le temps de correspondance est nul. Un tel cas correspond à une _"zone d'arrêt"_, avec qualification _"arrêt commercial"_, de deuxième niveau.
+Par la suite, on peut regrouper deux (ou plus) arrêts physiques au sein d'un _"arrêt commercial"_. Cela permet par exemple de regrouper les points d'arrêt physiques correspondant à deux poteaux d'arrêt de la même ligne situés de part et d'autre d'une chaussée mais aussi de regrouper l'ensemble des points d'arrêt physiques d'une gare routière pour lesquels on considère que le temps de correspondance est nul. Un tel cas correspond à une _"zone d'arrêt"_, avec qualification _"arrêt commercial"_, de deuxième niveau.
CHOUETTE offre la possibilité de regrouper les lieux d'arrêt agglomérés ainsi créés au sein d'une _"zone d'arrêt de troisième niveau_" pour constituer des _"Pôles d'échange"_.
-Un dernier regroupement est *l'ITL*. L'interdiction de trafic local* est l'interdiction faite à un service routier de prendre et de laisser un même voyageur à l'intérieur du périmètre des transports urbains (cf. Décret n°49-1473 du 14 novembre 1949).
+Un dernier regroupement est *l'ITL*. L'interdiction de trafic local* est l'interdiction faite à un service routier de prendre et de laisser un même voyageur à l'intérieur du périmètre des transports urbains (cf. Décret n°49-1473 du 14 novembre 1949) .
-Ainsi dans CHOUETTE, une ITL est un regroupement d'arrêts représentant le périmètre d'interdiction. Une ITL est associée à une ou plusieurs lignes. Il ne s'agit pas à proprement parler d'un type d'arrêt mais bien d'un regroupement d'arrêts.
+Ainsi dans CHOUETTE une ITL est un regroupement d'arrêts représentant le périmètre d'interdiction. Une ITL est associée à une ou plusieurs lignes. Il ne s'agit pas à proprement parler d'un type d'arrêt mais bien d'un regroupement d'arrêts. [pourquoi ne pas le traiter dans les groupes d'arrêts du coup ?]
-Des pictogrammes permettent d'identifier les différents types d'arrêts.
+!navigation.png!
+Enchaînement des pages de CHOUETTE
+
+Des pictogrammes permettent d'identifier les différents types de d'arrêts.
* !boardingposition.png! point d'embarquement
* !quay.png! quai
@@ -45,7 +48,7 @@ Saisir l'adresse postale de l'arrêt proposera une géolocalisation qu'il sera t
h3. Consultation et édition d'un arrêt
-Le nombre d'arrêts étant la plupart du temps assez important, il est probable que tous les arrêts ne puissent pas s'afficher sur la page des lignes. Des fonctions de recherche situées en haut de la page permettent de faire une recherche par le nom. Cliquer sur _"recherche avancée"_ permet de sélectionner des critères de recherche spécifiques par code postal et type d'arrêt.
+Le nombre d'arrêts étant la plus part du temps assez important, il est probable que tous les arrêts ne puissent pas s'afficher sur la page des lignes. Des fonctions de recherche situées en haut de la page permettent de faire une recherche par le nom. Cliquer sur _"recherche avancée"_ permet de sélectionner des critères de recherche spécifiques par code postal et type d'arrêt.
Pour afficher un arrêt existant, il suffit de cliquer sur le nom de l'arrêt depuis la liste des lignes existantes.
@@ -57,7 +60,7 @@ Une fois sur la page d'un arrêt, les arrêts de niveau hiérarchique différent
!2014-10-30_180536.png!
Hiérarchie des arrêts
-On retrouve également en bas de la page, un lien _"Liens entre arrêts"_ qui affiche les liens hiérarchiques entre l'arrêt consulté et les autres arrêts auquel il est lié. Cet affichage permet d'accéder aux autres arrêts liés en cliquant les arrêts. Dans le cas d'un arrêt physique, il affiche également la séquence d'arrêts à laquelle il est rattaché.
+On retrouve également en bas de la page, un lien _"Liens entre arrêts"_ qui affiche les liens hiérarchiques entre l'arrêt consulté et les autres arrêts auquel il est lié. Cet affichage permet d'accéder aux autres arrêts liés en cliquant les arrêts. Dans le cas d'un arrêt physique, il affiche également la séquence d'arrêt à laquelle il est rattaché.
h4. Modifier un arrêt
@@ -83,7 +86,7 @@ h3. Attributs d'un arrêt
* Position X : coordonnée horizontale de l'arrêt dans le référentiel de projection de l'espace de données
* Position Y : coordonnée verticale de l'arrêt dans le référentiel de projection de l'espace de données
* Longitude : longitude de l'arrêt dans le référentiel WGS84
-* Latitude : latitude de l'arrêt dans le référentiel WGS84
+* latitude : latitude de l'arrêt dans le référentiel WGS84
diff --git a/app/views/help/stopsmanagement.textile b/app/views/help/stopsmanagement.textile
index f4022dec8..40b170d4f 100644
--- a/app/views/help/stopsmanagement.textile
+++ b/app/views/help/stopsmanagement.textile
@@ -5,15 +5,15 @@ title: Modification des arrêts d'une ligne
h3. Nouvel arrêt ou modification d'arrêt existant
-Avec le temps, un ou plusieurs arrêts sont susceptibles de changer au sein d'une même ligne. Il est conseillé de faire la distinction entre les nouveaux arrêts et les arrêts modifiés. Si un arrêt est retiré d'une ligne et remplacé par un autre arrêt, il est conseillé de créer un nouvel arrêt correspondant et de faire la substitution dans la ligne. Il serait certes plus rapide de simplement changer le nom et la géolocalisation de l'arrêt désormais obsolète, mais la modification sera plus difficile à suivre et à comprendre. Il est également possible que cet arrêt resserve ultérieurement ou bien encore qu'il apparaisse dans d'autres bases de données exploitées par d'autres systèmes. Une simple modification de nom générerait alors une ambiguïté et des problèmes potentiels d'exploitations de ces données.
+Avec le temps, un ou plusieurs arrêts sont susceptibles de changer au sein d'une même ligne. Il est conseillé de faire la distinction entre les nouveaux arrêts et les arrêts modifiés. Si un arrêt est retiré d'une ligne et remplacé par un autre arrêt, il est conseillé de créer un nouvel arrêt correspondant et de faire la substitution dans la ligne. Il serait certes plus rapide de simplement changer le nom et la géolocalisation de l'arrêt désormais obsolète, mais la modification sera plus difficile à suivre et à comprendre. Il est également possible que cet arrêt resserve ultérieurement ou bien encore qu'il apparaisse dans d'autres bases de données exploitées par d'autres systèmes. Une simple modification de nom générerait alors de l’ambiguïté et des problèmes potentiels d'exploitations de ces données.
Dans le cas où il s'agit bien du même arrêt mais qui change soit de nom, soit de localisation, la modification est effectivement la marche à suivre. Il est conseillé de noter ces modifications en commentaire. En effet, il n'est pas rare qu'un même arrêt partagé par plusieurs réseaux possède plusieurs noms commerciaux et qu'un changement de nom ne soit pas connu de tous les partenaires transports. Annoter les modifications dans CHOUETTE facilitera la levée des ambiguïtés.
h3. Vérifier la cohérence des données de géolocalisation
-Les erreurs les plus fréquentes sont les erreurs de géolocalisation. Dès lors qu'un arrêt fait partie d'une ligne, des vérifications automatiques seront menées, notamment pour vérifier que l'arrêt est effectivement géolocalisé et qu'il n'y a pas de distance aberrante entre deux arrêts. Une vérification visuelle permet également de vérifier la cohérence des données :
+L'une des erreurs les plus fréquentes sont les erreurs de géolocalisation. Dès lors qu'un arrêt fait partie d'une ligne, des vérifications automatiques seront menées, notamment pour vérifier que l'arrêt est effectivement géolocalisé et qu'il n'y a pas de distance aberrante entre deux arrêts. Une vérification visuelle permet également de vérifier la cohérence des données :
* L'arrêt est-il bien placé sur une voirie sur le fond cartographique ?
* Les arrêts sont-ils bien placés sur la bonne commune ?
-* La séquence d'arrêts visible depuis l'interface des lignes dessine-t-elle un trajet cohérent ?
+* La séquence d'arrêt visible depuis l'interface des lignes dessine-t-elle un trajet cohérent ?
diff --git a/app/views/help/temporaryline.textile b/app/views/help/temporaryline.textile
index d14de7033..6b71a0748 100644
--- a/app/views/help/temporaryline.textile
+++ b/app/views/help/temporaryline.textile
@@ -1,6 +1,6 @@
---
layout: default
-title: Itinéraires valables le temps d'une saison
+title: Itinéraire valables le temps d'une saison
---
h3. Nouvelle ligne ou nouvelle séquence d'arrêts
@@ -10,11 +10,11 @@ Certains réseaux mettent parfois en œuvre des lignes spécifiques à un évén
* Il s'agit d'une ligne à part entière disposant de son propre nom
* Il s'agit d'un service rattaché à une ligne commerciale existante, même si l'itinéraire est différent.
-Le traitement de cette nouvelle ligne se fera en accord avec le type de cas rencontré. Dans le premier cas, une nouvelle ligne devra être créée avec des calendriers adaptés. Ce faisant, il faudra anticiper l'emploi de la base de donnée dans les systèmes situés en aval de CHOUETTE. S'il s'agit par exemple d'un site internet, une nouvelle ligne, dotée d'identifiants Neptune spécifiques nécessitera une prise en compte dans le site internet avec probablement un macaron spécifique.
+Le traitement de cette nouvelle ligne se fera en accord avec le type de cas rencontré. Dans le premier cas, une nouvelle ligne devra être créée avec des calendriers adaptés. Ce faisant, il faudra anticiper l'emploi de la base de donnée dans les systèmes situés en aval de CHOUETTE. S'il s'agit par exemple d'un site internet, une nouvelle ligne, dotée d'identifiants neptune spécifique nécessitera une prise en compte dans le site internet avec probablement un macaron spécifique.
-Dans le second cas, la définition d'une séquence d'arrêts spécifique permettra de traiter le cas particulier au sein d'une même ligne, même si les itinéraires sont très différents des trajets commerciaux. Créer une séquence d'arrêts spécifique est préférable à la création d'une nouvelle ligne qui porterait un suffixe "été" par exemple, car les identifiants de la ligne seront les mêmes et l'intégration de ce nouveau parcours au sein de la ligne dans les systèmes exploitant la base de données se fera plus facilement.
+Dans le second cas, la définition d'une séquence d'arrêts spécifique permettra de traiter le cas particulier au sein d'une même ligne, même si les itinéraires sont très différents des trajets commerciaux. Créer une séquence d'arrêt spécifique est préférable à la création d'une nouvelle ligne qui porterait un suffixe "été" par exemple car les identifiants de la ligne seront les mêmes et l'intégration de ce nouveau parcours au sein de la ligne dans les systèmes exploitant la base de données se fera plus facilement.
-L'avantage de pouvoir définir autant de séquences d'arrêts que nécessaire est de pouvoir traiter tous les cas spécifiques sans alourdir les données du cas standard.
+L'avantage de pouvoir définir autant de séquences d'arrêts que nécessaire, est de pouvoir traiter tous les cas spécifiques sans alourdir les données du cas standard.
h3. Création de calendriers spécifiques
diff --git a/app/views/help/terms.textile b/app/views/help/terms.textile
index 06192c084..97151a94e 100644
--- a/app/views/help/terms.textile
+++ b/app/views/help/terms.textile
@@ -6,7 +6,7 @@ title: Glossaire
* Arrêt : Il existe différentes catégories d'arrêts qui permettent de décrire le réseau. Ils s'organisent hiérarchiquement.
* Arrêt Physique : Il s'agit d'une catégorie qui regroupe les points d'arrêt et les quais. Les _"arrêts physiques"_ ne sont pas un type d'arrêt paramétrable dans CHOUETTE. Un arrêt physique est un lieu géographique réel.
* Point d'arrêt : Les points sont des arrêts physiques sur la voirie ou au sein d'une gare routière, classiquement signalés par un poteau.
-* Quai : Les quais sont des arrêts physiques de transports ferrés ou en site propre.
+* Quai : Les quais sont des arrêts physiques de transports ferrés.
* Arrêt commercial : Un arrêt commercial est un regroupement d'arrêts physiques (au moins un) desservant une même zone. Il est défini par un nom d'arrêt comme par exemple, "Mairie" ou bien encore "Gare routière".
* Pôle d'échange : Un pôle d'échange est un regroupement de un ou plusieurs arrêts commerciaux. Un pôle d'échange peut aussi contenir un autre pôle d'échange.
* Accès : Type d'accès physique (escalier, ascenseur, escalator) d'un arrêt.
@@ -20,12 +20,12 @@ title: Glossaire
* Indice : Nom raccourci d'un élément. Le numéro d'une ligne par exemple.
* Réseau : Identité d'un service de transport public.
* Transporteur : Service d'exploitation de véhicules de transport public au sein d'un réseau ou pour une ligne.
-* Calendrier : ensemble de dates associées à une course qui permet de déterminer les jours de fonctionnement des différentes courses.
-* GTFS : Format de données Google Transit. Il s'agit d'un format simple composé d'une série de fichiers CSV
-* Neptune : Format d'échange de données transport XML normalisé (NFP 99-506)
-* CSV : Type de fichier où l'information est enregistrée de façon simple, en utilisant des séparateurs pour distinguer les différentes information. Les fichiers CSV s'éditent avec un tableur.
-* Netex : Nouveau format européen d'échange de données transport XML normalisé.
-* HUB : Format d'échange Transdev composer d'un ensemble de fichiers au format txt mais dont les données sont organisées comme dans un fichier csv.
+* Calendrier : ensemble de dates associé à une course qui permet de déterminer les jours de fonctionnement des différentes courses.
+* GTFS : Format de données de Google. Il s'agit d'un format simple composé d'une série de fichiers csv
+* Neptune : Format européen d'échange de données transport xml normalisé
+* CSV : Type de fichier où l'information est enregistrée de façon simple, en utilisant des séparateurs pour distinguer les différentes information. Les fichiers csv s'éditent avec un tableur.
+* Netex : Nouveau format européen d'échange de données transport xml normalisé.
+* HUB : Format d'échange Transdev composer d'un ensemble de fichier au format txt mais dont les données sont organisées comme dans un fichier csv.
* Transport à la demande : Dans CHOUETTE, ligne régulière dont les services ne sont déclenchés que sur réservation des utilisateurs.
diff --git a/app/views/help/time_tables.textile b/app/views/help/time_tables.textile
index a8bff2a6f..783e51f5e 100644
--- a/app/views/help/time_tables.textile
+++ b/app/views/help/time_tables.textile
@@ -41,7 +41,7 @@ h3. Attributs
* Étiquettes : Marqueurs caractérisant le calendrier (pour simplifier la recherche). Afin d'être enregistrées, les étiquettes doivent être saisies séparées par une ',' (virgule) et la touche 'tab' permet d'activer la dernière. Un assistant propose les étiquettes déjà saisies sur d'autres calendriers.
* Périodes d'application : périodes calendaires durant lesquelles le calendrier est applicable
* Jours d'application : jours de la semaine effectivement applicables dans le cas où des périodes sont définies dans le calendrier
-* Dates particulières : dates spécifiques pour lesquelles le calendrier est applicable ; ces dates peuvent être ajoutées dans ou en dehors des périodes calendaires. Un calendrier peut n'avoir que des dates calendaires, auquel cas les jours d'application n'ont pas de signification.
+* Dates particulières : dates spécifiques pour lesquelles le calendrier est applicable ; ces dates peuvent être ajoutées dans ou en dehors des périodes calendaires. Un calendrier peut n'avoir que des dates calendaires, auquel cas les jours d'applications n'ont pas de signification.
* Dates exclues : dates spécifiques à retirer des dates définies par les périodes et les jours d'application ; une même date calendaire ne peut pas être à la fois particulière et exclue;
une date exclue hors périodes et jours d'application n'a aucun effet.
diff --git a/app/views/help/timebands.textile b/app/views/help/timebands.textile
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/help/timebands.textile
diff --git a/app/views/help/toc.textile b/app/views/help/toc.textile
index f6cb389e4..568fb5c73 100644
--- a/app/views/help/toc.textile
+++ b/app/views/help/toc.textile
@@ -28,20 +28,23 @@ h3. Sommaire
## "Missions":journey_patterns
## "Courses et horaires":vehicle_journeys
## "Correspondances":connection_links
-## "Calendriers":time_tables
+## "Calendrier":time_tables
+## "Tracés":route_sections
# Imports
## "Imports":imports
## "Formats d'import":import_formats
# Exports
-## "Formats d'export normalisé":export_format
+## "Formats d'export":export_format
## "Export de données":exports
# Validations
## "Paramètres de validation":parametersets
## "Valider des données":validations
# Annexes
## "Créer un réseau à partir de zéro":startingfromscratch
+## "Importer massivement des arrêts depuis un fichier GTFS":GTFS_stops_import
+## "Exporter et importer des horaires en .csv":vehicle_journeys_import_export
## "Modification des arrêts d'une ligne":stopsmanagement
-## "Itinéraires valables le temps d'une saison":temporaryline
+## "Supression des courses obsolètes parmis d'autres valides":vehicle_journeys_cleaning
+## "Itinéraire valables le temps d'une saison":temporaryline
## "Contraintes de l'export HUB":hubexport
-## "Format CSV chouette":csv
## "Glossaire":terms
diff --git a/app/views/help/validations.textile b/app/views/help/validations.textile
index 1513ed0e0..c2927cdbf 100644
--- a/app/views/help/validations.textile
+++ b/app/views/help/validations.textile
@@ -22,7 +22,7 @@ p. Les tests (« points de contrôle ») de validation Neptune sont décrits sur
h3(#fmt). Formats disponibles
-- Neptune := format normalisé des échanges de données de transport en commun pour la France
+- Neptune := format normalisé des échanges de données de transport en commun pour la France (cf "Normalisation":normalisation)
- Données internes Chouette := tests sur les objets déjà importés ou créés/modifiés en base (Phase 3 uniquement)
h3(#val). Onglet VALIDATIONS
@@ -35,7 +35,7 @@ p=. !validation.png!
p. Dans la partie droite de l'écran :
-* Ajouter une Validation
+* ajouter une Validation
* Jeu de paramètres
h3(#new). Ajouter une Validation
@@ -47,7 +47,7 @@ p. A chaque objet Import est associé un objet Validation, mais l'inverse est fa
h3(#res). Consultation des résultats : détail de l'objet Validation
-p. La validation est lancée en différé; son état d'avancement est affiché sous la forme d'une icône dont la couleur dépend de l'état:
+p. La validation est lancée en différé; son état d'avancement est affiché sous la forme d'une icône donc la couleur dépend de l'état:
* bleu : en cours
* vert : terminé correctement
@@ -97,13 +97,11 @@ Une bulle d'information s'affiche en sélectionnant une icône bleue !notice.png
p(border_image). !validation_bulle.png!
-p. La spécification du test s'affiche par le lien sur le code.
+p. La spécification du test s'affiche par le lien sur le code
p. En cas d'erreur, la localisation est fournie dans la colonne 'Détail':
* pour les tests des phases 1 et 2, par l'emplacement (nom du fichier, ligne et colonne) de l'objet en erreur,
-* pour les tests de la phase 3, par un lien vers la page de consultation de l'objet en base qui est en erreur.
+* pour les tests de la phase 3, par un lien vers la page de consultation de l'objet en erreur.
-p(border_image). !validation_location.png!
-
-p. Un bouton à droite permet d'exporter l'ensemble du rapport de validation au format CSV pour usage externe.
+p(border_image). !validation_location.png! \ No newline at end of file
diff --git a/app/views/help/vehicle_journeys.textile b/app/views/help/vehicle_journeys.textile
index ec8aef8cf..b2b87379f 100644
--- a/app/views/help/vehicle_journeys.textile
+++ b/app/views/help/vehicle_journeys.textile
@@ -28,7 +28,7 @@ Un bouton _"séquence d'arrêts"_ est positionné au-dessus de la liste des arrÃ
h4. Consulter le détail d'une course
-Dans le tableau des courses, le lien en en-tête de colonne permet de sélectionner une autre séquence d'arrêt de la ligne ce qui permet de passer d'une séquence à l'autre directement sans avoir besoin de revenir à la page de la séquence d'arrêts. Cela permet par exemple d'accéder directement à la séquence d'arrêts retour.
+Dans le tableau des courses, le lien en en-tête de colonne permet de sélectionner une autre séquence d'arrêt de la ligne ce qui permet de passer d'une séquence à l'autre directement sans avoir besoin de revenir à la page de la séquence d'arrêt. Cela permet par exemple d'accéder directement à la séquence d'arrêt retour.
L'en-tête de chaque course propose un bouton qui permet d'accéder à des fonctions relative à la course :
@@ -59,16 +59,7 @@ Dès lors que la mission est sélectionnée, la liste des arrêts à desservir s
h4. Ajouter une course par import .csv
-L'import d'une ou plusieurs courses par un fichier .csv permet d'ajouter des courses éditées dans un tableur. La forme du tableau étant très spécifique, il convient de récupérer le modèle en cliquant sur _"Export des horaires aux arrêts"_ puis de compléter les horaires dans le tableur. Le séparateur retenu pour le fichier .csv est le point-virgule. L'export fournit un fichier .zip comprenant le fichier des horaires et les calendriers.
-
-Le fichier calendrier permet de connaître le code de chaque calendrier et de le reporter dans le fichier des horaires dans la ligne _"calendriers"_. Dans le cas où plusieurs calendriers doivent être associés à une course, le code de chaque calendrier doit être séparé par une virgule.
-
-!2014-10-31_114422.png!
-Import des horaires au format .csv
-
-Les données horaires peuvent être rajoutées dans le fichier .csv, en revanche, il convient de laisser le champ _"id course"- vide. CHOUETTE se chargera de lui attribuer un numéro valide lors de l'import.
-
-L'import du fichier .csv ne concerne que le fichier .csv proprement dit. Importer un fichier .zip identique au fichier exporté, génèrera une erreur.
+L'export/import de données horaire au format .csv est possible depuis l'interface des horaires. Voir le chapitre ""Exporter et importer des horaires en .csv":vehicle_journeys_import_export
h3. Modifier une course
@@ -84,20 +75,26 @@ Un cadre situé au-dessus de la liste des horaires offre une fonction supplémen
h4. Modification d'une course par import .csv
-L'import d'un fichier .csv permet de modifier des courses éditées dans un tableur. Cliquer sur _"export des horaires aux arrêts"_ permet de récupérer le fichier des courses. Les modifications ou même les ajouts de courses seront pris en compte après import dans la base. Le séparateur retenu pour le fichier .csv est le point-virgule. Il ne faut pas saisir _"d'id de course"_ lorsque l'on saisit au travers d'un fichier .csv. CHOUETTE génèrera un numéro valide à l'import. Saisir un numéro fera échouer l'import.
+L'import d'un fichier .csv permet de modifier des courses éditées dans un tableur. Cliquer sur _"export des horaires aux arrêts"_ permet de récupérer le fichier des courses. Les modifications ou même les ajouts de courses seront pris en compte après import dans la base. Le séparateur retenu pour le fichier .csv est le point-virgule. Il ne faut pas saisir _"d'id de course"_ lorsque l'on saisit au travers d'un fichier .csv de nouvelles courses. CHOUETTE génèrera lui-même un numéro valide à l'import. Saisir un numéro fera échouer l'import.
+
+Supprimer toute la colone d'une course du fichier n'aura aucun effet. En effet, la course n'apparaissant plus dans le fichier, son réimport n'aura aucune conséquence sur la course existante en base.
+
+Pour supprimer une course depuis le fichier CSV, il convient de supprimer toutes les informations, sauf l'identifiant de la course (id_course).
+
+Attention, contrairement à l'import export de base de données qui passent par des étapes de validation, l'import export de course par fichier CSV ne comporte aucune étape de vérification. Il est donc possible d'intégrer des données incohérentes, comme par exemple des horaires non chronologiques.
!2014-10-31_114639.png!
Saisie d'horaire dans un tableur.
L'export fournit un fichier .zip comprenant le fichier des horaires et les calendriers.
-L'import, en retour, ne concerne que le fichier .csv proprement dit. Importer un fichier .zip identique au fichier exporté générera une erreur.
+L'import en retour ne concerne que le fichier .csv proprement dit. Importer un fichier .zip identique au fichier exporté, génèrera une erreur.
h4. Cloner une course
-Depuis la page d'une course, il est possible de cloner la course en cliquant dans le menu latéral sur _"Cloner la course"_. Une boite de dialogue s'affiche et permet de choisir les paramètres de clonage. Le clonage n'est pas une duplication à l'identique. Il ne permet pas de créer une deuxième course en tout point identique mais de créer une course ayant les mêmes paramètres, les mêmes temps de trajet inter-arrêts, *mais à un horaire différent*, comme le fait la fonction de décalage présente au-dessus des horaires de la course.
+Depuis la page d'une course, il est possible de cloner la course en cliquant dans le menu latéral sur _"Cloner la course"_. Une boite de dialogue s'affiche et permet de choisir les paramètres de clonage. Le clonage n'est pas une duplication à l'identique. Il ne permet pas de créer une deuxième course en tout point identique mais de créer une course ayant les mêmes paramètres, les mêmes temps de trajet inter-arrêts mais à un horaire différent comme le fait la fonction de décalage présente au-dessus des horaires de la course.
-Contrairement au décalage qui modifie les horaires de la course existante, le clonage crée une nouvelle course avec des horaires différents. Le premier paramètre permet de choisir si on clone la nouvelle course en fonction de l'horaire de départ ou de l'horaire d'arrivée, puis de choisir l'horaire exact de clonage.
+Contrairement au décalage qui modifie les horaires de la course existante, le clonage crée une nouvelle course avec des horaires différents. Le premier paramètre permet de choisir si on clone la nouvelle course en fonction de l'horaire de départ ou de l'horaire d'arrivée puis de choisir l'horaire exact de clonage.
Deux autres paramètres facultatifs permettent de répéter l'opération "en rafale" sur des bases régulières en définissant l’intervalle entre deux courses et le nombre de copies à effectuer selon cette modalité.
@@ -115,8 +112,6 @@ h3. Attributs
* Mode de transport : mode de transport pour la course; par défaut, c'est le mode de transport de la ligne qui est appliqué
* Accessibilité PMR : précise si la course est équipée PMR
* Transport à la demande : précise si la course est en exploitation à la demande ou pas
-* État de trafic : état de trafic
-* Équipement : équipement
* Type d'identifiant du véhicule : type d'identifiant du véhicule
diff --git a/app/views/help/vehicle_journeys_cleaning.textile b/app/views/help/vehicle_journeys_cleaning.textile
new file mode 100644
index 000000000..7b10deba6
--- /dev/null
+++ b/app/views/help/vehicle_journeys_cleaning.textile
@@ -0,0 +1,33 @@
+---
+layout: default
+title: Supression des courses obsolètes parmis d'autres valides
+---
+
+La purge des données ne supprime que les courses des lignes entièrement osbolètes. Dans le cas où seules certaines courses d'une mission sont obsolètes, il convient de les supprimer manuellement.
+
+Cette suppression peut se faire directement dans l'interface de Chouette mais elle est relativement laborieuse car il faut supprimer les courses une à une en plusieurs clics à chaque fois.
+
+Dans les cas où de nombreuses courses doivent être supprimées, il est préférable d'employer la fonction d'export/import des horaires au format CSV. Cela permet d'éditer les horaires massivement dans un tableur et de réimporter les données dans CHOUETTE pour leur prise en compte.
+
+h3. Export des arrêts
+
+La première étape consiste à exporter les données horaires de la séquence d'arrêt. Cet export CSV se fait au niveau des horaires, il est distinct d'un export de base proprement dit.
+!2014-10-31_114422.png!
+
+Le fichier téléchargé comprend trois fichiers :
+* Calendrier qui permet de faire la correspondance entre le nom des calendriers et les codes utilisés dans les horaires.
+* Course comportant les horaires proprement dits. C'est ce fichier qu'il faudra mettre à jour et réimporter dans l'application.
+* Notes : qui reprend les commentaires éventuellement associés aux lignes
+
+h3. Edition du fichier des horaires
+
+Après l'ouverture du fichier des horaires, Il faut dans un premier temps identifier toutes les courses auxquelles sont affectés des calendriers obsolètes. Ensuite, les données horaires doivent être supprimées. Il faut en revanche bien conserver l'identifiant de course (Id Course) présent sur la première ligne. C'est sa présence qui permettra lors de l'import du fichier édité, de transformer une course dotée d'horaires en course vide qui sera ensuite effacée par le système.
+!2014-10-31_114639.png!
+
+Le séparateur retenu pour le fichier .csv est le point-virgule et le format des caractères est l'UTF8.
+
+h3. Import du fichier horaire
+
+L'import ne concerne que le fichier horaire, il n'est pas nécessaire de l'importer dans un fichier .zip.
+Comme pour l'export des horaires, l'import se fait depuis la page horaire.
+Son import avec des courses qui ont conservé leur identifiant mais qui ne contiennent plus d'horaire effacera ces données de CHOUETTE. \ No newline at end of file
diff --git a/app/views/help/vehicle_journeys_import_export.textile b/app/views/help/vehicle_journeys_import_export.textile
new file mode 100644
index 000000000..133b0d156
--- /dev/null
+++ b/app/views/help/vehicle_journeys_import_export.textile
@@ -0,0 +1,22 @@
+---
+layout: default
+title: Exporter et importer des horaires en .csv
+---
+
+L'import d'une ou plusieurs courses par un fichier .csv permet d'ajouter des courses éditées dans un tableur. La forme du tableau étant très spécifique, il convient de récupérer le modèle en cliquant sur _"Export des horaires aux arrêts"_ puis de compléter les horaires dans le tableur. Le séparateur retenu pour le fichier .csv est le point-virgule. L'export fournit un fichier .zip comprenant le fichier des horaires et les calendriers.
+
+Le fichier calendrier permet de connaître le code de chaque calendrier et de le reporter dans le fichier des horaires dans la ligne _"calendriers"_. Dans le cas où plusieurs calendriers doivent être associés à une course, le code de chaque calendrier doit être séparé par une virgule.
+
+Le fichier notes permet de connaître le code de chaque note de bas de page créée sur la ligne et de le reporter dans le fichier des horaires dans la ligne _"notes de bas de page"_. Dans le cas où plusieurs notes de bas de page doivent être associées à une course, le code de chaque notes de bas de page doit être séparé par une virgule.
+
+
+!2014-10-31_114422.png!
+Import des horaires au format .csv
+
+Les données horaires peuvent être rajoutées dans le fichier .csv, en revanche, il convient de laisser le champ _"id course"- vide. CHOUETTE se chargera de lui attribuer un numéro valide lors de l'import.
+
+Il est également possible de modifier une course déjà existante dans le fichier. Il convient dans ce cas de conserver l'identifiant de la course et de l'éditer. Les informations relatives à cette course seront modiifés lors de l'import.
+
+La suppression d'une course existante se fait en conservant l'identifiant de la course mais en effaçant toutes les données de la course. Lors de l'import, la course vide sera alors supprimée.
+
+L'import du fichier .csv ne concerne que le fichier horaire .csv proprement dit. Importer un fichier .zip identique au fichier exporté, génèrera une erreur. \ No newline at end of file
diff --git a/app/views/import_tasks/new.html.erb b/app/views/import_tasks/new.html.erb
index d2581601b..303299f73 100644
--- a/app/views/import_tasks/new.html.erb
+++ b/app/views/import_tasks/new.html.erb
@@ -2,33 +2,39 @@
<ul class="nav nav-pills">
<% ImportTask.data_formats.each do |format| %>
- <li role="presentation"><a href="#<%= format %>" class='<%= @import_task.data_format == format ? "#{format} active" : "#{format}" %>' title='<%= t(:"enumerize.data_format_detail.#{format}")%>' data-toggle="tab"><%= t(:"enumerize.data_format.#{format}") %></a></li>
+ <li role="presentation">
+ <a href="#<%= format %>" class='<%= @import_task.data_format == format ? "#{format} active" : "#{format}" %>'
+ title='<%= t(:"enumerize.data_format_detail.#{format}")%>'
+ data-toggle="tab"><%= t(:"enumerize.data_format.#{format}") %>
+ </a>
+ </li>
<% end %>
</ul>
<div class="tab-content">
-<% @available_imports.each do |import_task| %>
- <%= semantic_form_for [@referential, import_task], :as => :import_task, :url => referential_import_tasks_path(@referential), :namespace => import_task.data_format ,:html => { :id => "#{import_task.data_format}", :class => "tab-pane highlight"} do |form| %>
- <%= form.inputs do %>
- <%= form.input :user_name, :as => :hidden, :input_html => { :value => current_user.name } %> <%= form.input :user_id, :as => :hidden, :input_html => { :value => current_user.id } %>
- <%= form.input :data_format, :as => :hidden %>
- <%= form.input :referential_id, :as => :hidden, :input_html => { :value => @referential.id } %>
- <%= form.input :name %>
- <%= form.input :no_save, :as => :boolean %>
- <%= form.input :rule_parameter_set_id, :as => :select,
- :collection => @referential.organisation.rule_parameter_sets.map { |rps| [ rps.name, rps.id ] }, :include_blank => true %>
- <%= form.input :resources, :as => :file %>
- <% end %>
-
- <%= render partial: "fields_#{import_task.data_format}_import", :locals => { :form => form } %>
-
- <%= form.actions do %>
- <%= form.action :submit, :as => :button , :label => t( 'formtastic.import' ) %>
- <%= form.action :cancel, :as => :link %>
- <% end %>
-
+ <% @available_imports.each do |import_task| %>
+ <%= semantic_form_for [@referential, import_task], :as => :import_task, :url => referential_import_tasks_path(@referential),
+ :namespace => import_task.data_format, :html => { :id => "#{import_task.data_format}",
+ :class => "tab-pane highlight" } do |form| %>
+ <%= form.inputs do %>
+ <%= form.input :user_name, :as => :hidden, :input_html => { :value => current_user.name } %>
+ <%= form.input :user_id, :as => :hidden, :input_html => { :value => current_user.id } %>
+ <%= form.input :data_format, :as => :hidden %>
+ <%= form.input :referential_id, :as => :hidden, :input_html => { :value => @referential.id } %>
+ <%= form.input :name %>
+ <%= form.input :no_save, :as => :boolean %>
+ <%= form.input :rule_parameter_set_id, :as => :select,
+ :collection => @referential.organisation.rule_parameter_sets.map { |rps| [ rps.name, rps.id ] },
+ :include_blank => true %>
+ <%= form.input :resources, :as => :file %>
+ <% end %>
+ <%= render partial: "fields_#{import_task.data_format}_import", :locals => { :form => form } %>
+ <%= form.actions do %>
+ <%= form.action :submit, :as => :button , :label => t( 'formtastic.import' ) %>
+ <%= form.action :cancel, :as => :link %>
+ <% end %>
+ <% end %>
<% end %>
-<% end %>
</div>
<%= javascript_include_tag new_referential_import_task_path(@referential, :format => :js) %>
diff --git a/app/views/imports/show.html.erb b/app/views/imports/show.html.erb
index 21e06d964..926445f93 100644
--- a/app/views/imports/show.html.erb
+++ b/app/views/imports/show.html.erb
@@ -19,7 +19,7 @@
<%= link_to font_awesome_classic_tag("fa-file-#{@import.filename_extension}-o") + t("imports.show.imported_file"), imported_file_referential_import_path(@referential, @import.id) if @import.file_path? %>
<%= link_to font_awesome_classic_tag("fa-external-link") + t("imports.show.compliance_check"), compliance_check_referential_import_path(@referential, @import.id) if @import.compliance_check? %>
</div>
- <%= render(partial: "shared/ie_report.html", locals: {job: @import}) %>
+ <%= render(partial: 'shared/ie_report', locals: {job: @import, line_items: @line_items}) %>
</div>
<% content_for :sidebar do %>
diff --git a/app/views/journey_patterns/_journey_pattern.html.erb b/app/views/journey_patterns/_journey_pattern.html.erb
index 5794f8d69..029b3c40e 100644
--- a/app/views/journey_patterns/_journey_pattern.html.erb
+++ b/app/views/journey_patterns/_journey_pattern.html.erb
@@ -21,9 +21,16 @@
<% end %>
<p><%= t('.stop_count', :count => journey_pattern.stop_points.count, :route_count => @route.stop_points.count) %> | <%= t('.vehicle_journeys_count', :count => journey_pattern.vehicle_journeys.count) %></p>
<% if journey_pattern.vehicle_journeys.count > 0 %>
- <p>
- <i class="fa fa-clock-o"></i><%= 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 => "with_fa" %>
- </p>
+ <p>
+ <i class="fa fa-clock-o"></i>
+ <%= 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 => "with_fa" %>
+ </p>
+ <% if exist_vehicle_journey_frequencies?(@route, journey_pattern) %>
+ <p>
+ <i class="fa fa-clock-o"></i>
+ <%= link_to t('vehicle_journey_frequencies.actions.index'), referential_line_route_vehicle_journey_frequencies_path(@referential, @line, @route, :q => {:journey_pattern_id_eq => journey_pattern.id}) %>
+ </p>
+ <% end %>
<% end %>
</div>
</div>
diff --git a/app/views/journey_patterns/show.html.erb b/app/views/journey_patterns/show.html.erb
index dc9e852fa..6bd6022f7 100644
--- a/app/views/journey_patterns/show.html.erb
+++ b/app/views/journey_patterns/show.html.erb
@@ -34,9 +34,14 @@
<ul class="actions">
<li><%= link_to t('journey_patterns.actions.new'), new_referential_line_route_journey_pattern_path(@referential, @line, @route), :class => "add" %></li>
<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, :data => {:confirm => t('journey_patterns.actions.destroy_confirm')}, :class => "remove" %></li>
+ <li><%= link_to t('journey_patterns.actions.destroy'), referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern), :method => :delete, :data => {:confirm => t('journey_patterns.actions.destroy_confirm')}, :class => "remove" %></li>
+ <li>
+ <%= link_to edit_referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern), class: "edit#{' control-shape' if @journey_pattern.control?}" do %>
+ <%= t('journey_patterns.actions.edit_route_sections') %>
+ <% if @journey_pattern.control? %><i class="fa fa-exclamation-triangle"></i><% end %>
+ <% end %>
+ </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 => "clock" %></li>
</ul>
<%= creation_tag(@journey_pattern) %>
<% end %>
-
diff --git a/app/views/lines/_form.erb b/app/views/lines/_form.erb
index 58cb7e6e3..442434d3b 100644
--- a/app/views/lines/_form.erb
+++ b/app/views/lines/_form.erb
@@ -9,6 +9,7 @@
<%= form.input :transport_mode, :as => :select, :collection => Chouette::Line.transport_modes, :include_blank => false, :member_label => Proc.new { |mode| t("transport_modes.label.#{mode}") } %>
<%= form.input :color, :as => :string %>
<%= form.input :text_color %>
+ <%= form.input :stable_id %>
<%= form.input :url %>
<%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[@line.human_attribute_name("accessible"), true], [@line.human_attribute_name("not_accessible"), false]], :include_blank => true %>
<%= form.input :flexible_service, :as => :select, :collection => [[@line.human_attribute_name("on_demaond_fs"), true], [@line.human_attribute_name("regular_fs"), false]], :include_blank => true %>
diff --git a/app/views/lines/_line.erb b/app/views/lines/_line.erb
index 69c7978ab..20bdb9563 100644
--- a/app/views/lines/_line.erb
+++ b/app/views/lines/_line.erb
@@ -1,26 +1,26 @@
-<div id="index_item" class="panel panel-default line">
- <div class="panel-heading">
- <div class="panel-title clearfix">
- <span class="pull-right">
- <%= link_to edit_referential_line_path(@referential, line), :class => "btn btn-default btn-sm" do %>
+<div id="index_item" class="panel panel-default line ce-LineBlock">
+ <div class="panel-heading ce-LineBlock-header">
+ <ul class="ce-LineBlock-header-list">
+ <li>
+ <%= check_box_tag "ids[]", line.id, false, class: "multiple_selection", style: "display: none;" %>
+ <% if line.number && line.number.length <= 3 %>
+ <span class="label label-default line_number" style="<%= number_style(line) %>"><%= line.number %></span>
+ <% end %>
+ </li>
+ <li>
+ <%= link_to([@referential, line], class: 'preview', title: "#{Chouette::Line.model_name.human.capitalize} #{line.name}") do %>
+ <h5 class="ce-LineBlock-header-title"><%= truncate(line.name, length: 24) %></h5>
+ <% end %>
+ </li>
+ <li>
+ <%= link_to edit_referential_line_path(@referential, line), class: 'btn btn-default btn-sm' do %>
<span class="fa fa-pencil"></span>
- <% end if edit %>
- <%= link_to referential_line_path(@referential, line), :method => :delete, :data => {:confirm => t('lines.actions.destroy_confirm')}, :class => "btn btn-danger btn-sm" do %>
+ <% end if edit %>
+ <%= link_to referential_line_path(@referential, line), method: :delete, data: { confirm: t('lines.actions.destroy_confirm') }, class: 'btn btn-danger btn-sm' do %>
<span class="fa fa-trash-o"></span>
<% end if delete %>
- </span>
- <h5>
- <%= check_box_tag "ids[]", line.id, false, :class => "multiple_selection", :style => "display: none;" %>
- <% if line.number and line.number.length <= 3 %>
- <span class="label label-default line_number" style="<%= number_style(line) %>"><%= line.number %></span>
- <% end %>
- <%= link_to([@referential, line], :class => "preview", :title => "#{Chouette::Line.model_name.human.capitalize} #{line.name}") do %>
- <span class="name">
- <%= truncate(line.name, :length => 20) %>
- </span>
- <% end %>
- </h5>
- </div>
+ </li>
+ </ul>
</div>
<div class="panel-body">
<p>
@@ -39,7 +39,7 @@
</p>
<p>
<% if line.group_of_lines.count == 0 %>
- <%= t('lines.form.no_group_of_line') %>
+ <br><%# t('lines.form.no_group_of_line') %>
<% elsif line.group_of_lines.count == 1 %>
<%= line.human_attribute_name('group_of_line') %>
<%= link_to_if( line.group_of_lines.first, line.group_of_lines.first.name, referential_group_of_line_path(@referential, line.group_of_lines.first), :title => "#{line.human_attribute_name('group_of_line')} #{line.group_of_lines.first.name}") %>
diff --git a/app/views/lines/show.html.erb b/app/views/lines/show.html.erb
index 3654840fd..7cfbf8b23 100644
--- a/app/views/lines/show.html.erb
+++ b/app/views/lines/show.html.erb
@@ -48,6 +48,11 @@
<%= t("transport_modes.label.#{@line.transport_mode}") %>
</p>
<p>
+ <label><%= @line.human_attribute_name("stable_id") %>: </label>
+ <%= @line.stable_id %>
+ </p>
+
+ <p>
<label><%= @line.human_attribute_name("url") %>: </label>
<%= @line.url %>
</p>
@@ -124,7 +129,9 @@
<li><%= link_to t('lines.actions.new'), new_referential_line_path(@referential), :class => "add" %></li>
<li><%= link_to t('lines.actions.edit'), edit_referential_line_path(@referential, @line), :class => "edit" %></li>
<li><%= link_to t('lines.actions.destroy'), referential_line_path(@referential, @line), :method => :delete, :data => {:confirm => t('lines.actions.destroy_confirm')}, :class => "remove" %></li>
- <li><%= link_to t('routes.actions.new'), new_referential_line_route_path(@referential, @line), :class => "add" %></li>
+ <% if !@line.hub_restricted? || (@line.hub_restricted? && @line.routes.size < 2) %>
+ <li><%= link_to t('routes.actions.new'), new_referential_line_route_path(@referential, @line), :class => "add" %></li>
+ <% end %>
</ul>
<%= creation_tag(@line) %>
<% end %>
diff --git a/app/views/networks/_form.erb b/app/views/networks/_form.erb
index cb9575664..5794794fd 100644
--- a/app/views/networks/_form.erb
+++ b/app/views/networks/_form.erb
@@ -6,6 +6,7 @@
<%= form.input :version_date, :as => :date_picker %>
<%= form.input :description %>
<%= form.input :source_name %>
+ <%= form.input :source_type_name, :as => :select, :collection => Chouette::Network.source_type_names, :include_blank => true, :member_label => Proc.new { |mode| t("source_types.label.#{mode}") } %>
<%= form.input :source_identifier %>
<%= form.input :objectid, :required => !@network.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.network.objectid")} %>
<% end %>
diff --git a/app/views/networks/show.html.erb b/app/views/networks/show.html.erb
index e7b103dda..d61974394 100644
--- a/app/views/networks/show.html.erb
+++ b/app/views/networks/show.html.erb
@@ -26,6 +26,12 @@
<%= @network.source_name %>
</p>
<p>
+ <label><%= Chouette::Network.human_attribute_name("source_type_name") %>: </label>
+ <% if @network.source_type_name.present? %>
+ <%= t("source_types.label.#{@network.source_type_name}") %>
+ <% end %>
+ </p>
+ <p>
<label><%= Chouette::Network.human_attribute_name("source_identifier") %>: </label>
<%= @network.source_identifier %>
</p>
diff --git a/app/views/referentials/_counts.html.erb b/app/views/referentials/_counts.html.erb
index 3ade4e945..20078429b 100644
--- a/app/views/referentials/_counts.html.erb
+++ b/app/views/referentials/_counts.html.erb
@@ -32,6 +32,10 @@
<%= Referential.human_attribute_name("connection_links") %>
</li>
<li class="list-group-item">
+ <span class="badge"><%= @referential.route_sections.size %></span>
+ <%= link_to Referential.human_attribute_name("route_sections"), referential_route_sections_path(@referential) %>
+ </li>
+ <li class="list-group-item">
<span class="badge"><%= @referential.stop_areas.size %></span>
<%= Referential.human_attribute_name("stop_areas") %>
</li>
diff --git a/app/views/route_sections/_form.html.erb b/app/views/route_sections/_form.html.erb
new file mode 100644
index 000000000..28a1dd47a
--- /dev/null
+++ b/app/views/route_sections/_form.html.erb
@@ -0,0 +1,24 @@
+<%= semantic_form_for [@referential, @route_section] do |form| %>
+ <%= form.inputs do %>
+ <% if @route_section.new_record? %>
+ <%= form.input :departure, as: :select, collection: @stop_areas, include_blank: false %>
+ <%= form.input :arrival, as: :select, collection: @stop_areas, include_blank: false %>
+ <% else %>
+ <li class="input optional">
+ <label class="label"><%= @route_section.human_attribute_name("departure") %></label>
+ <%= @route_section.departure.name %>
+ </li>
+ <li class="input optional">
+ <label class="label"><%= @route_section.human_attribute_name("arrival") %></label>
+ <%= @route_section.arrival.name %>
+ </li>
+ <%= form.input :editable_geometry, as: :hidden %>
+ <% end %>
+
+ <%= form.input :no_processing, label: t('.no_processing'), as: :select, collection: { t('.standard_processor') => false, t('.no_processor') => true }, include_blank: false %>
+ <% end %>
+ <%= form.actions do %>
+ <%= form.action :submit, :as => :button, label: t('.submit') %>
+ <%= form.action :cancel, :as => :link %>
+ <% end %>
+<% end %>
diff --git a/app/views/route_sections/edit.html.erb b/app/views/route_sections/edit.html.erb
new file mode 100644
index 000000000..1e8133344
--- /dev/null
+++ b/app/views/route_sections/edit.html.erb
@@ -0,0 +1,4 @@
+<%= title_tag t('route_sections.edit.title') %>
+
+<%= @map.to_html if @map %>
+<%= render "form" %>
diff --git a/app/views/route_sections/index.html.erb b/app/views/route_sections/index.html.erb
new file mode 100644
index 000000000..763ea360e
--- /dev/null
+++ b/app/views/route_sections/index.html.erb
@@ -0,0 +1,58 @@
+<%= title_tag t('.title') %>
+
+<%= form_for search, url: referential_route_sections_path(@referential), method: :get, class: "form-inline" do |form| %>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="col-md-6">
+ <%= form.text_field :departure_name, class: 'form-control', placeholder: Chouette::RouteSection.human_attribute_name(:departure) %>
+ </div>
+
+ <div class="input-group col-md-6">
+ <%= form.text_field :arrival_name, class: 'form-control', placeholder: Chouette::RouteSection.human_attribute_name(:arrival) %>
+ <div class="input-group-btn">
+ <button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button>
+ </div>
+ </div>
+ </div>
+
+ <div class="panel-body">
+ <div class="col-md-4">
+ <%= form.select :line_id, @referential.lines.order(:name).pluck(:name, :id), { include_blank: t('.all_lines')}, class: 'form-control' %>
+ </div>
+ </div>
+ </div>
+<% end %>
+
+<table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th><%= Chouette::RouteSection.human_attribute_name :departure %></th>
+ <th><%= Chouette::RouteSection.human_attribute_name :arrival %></th>
+ <th class="distance"><%= Chouette::RouteSection.human_attribute_name :distance %></th>
+ <th class="points"><%= Chouette::RouteSection.human_attribute_name :points %></th>
+ <th class="points"><%= Chouette::RouteSection.human_attribute_name :quantity %></th>
+ <th class="actions"></th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @route_sections.each do |route_section| %>
+ <tr>
+ <td><%= route_section.departure.name %> <%= link_to content_tag(:i, "", class: "fa fa-external-link"), referential_stop_area_path(@referential, route_section.departure) %></td>
+ <td><%= route_section.arrival.name %> <%= link_to content_tag(:i, "", class: "fa fa-external-link"), referential_stop_area_path(@referential, route_section.arrival) %></td>
+ <td class="distance"><%= route_section.distance.to_i if route_section.distance %></td>
+ <td class="points"><%= route_section.via_count if route_section.via_count > 0 %></td>
+ <td class="journey_patterns"><%= route_section.journey_pattern_sections.count(:journey_pattern_id, distinct: true) %></td>
+ <td class="actions">
+ <%= link_to t('.actions.show'), referential_route_section_path(@referential, route_section), class: "view" %>
+ <%= link_to t('.actions.edit'), edit_referential_route_section_path(@referential, route_section), class: "edit" %>
+ <%= link_to t('.actions.destroy'), referential_route_section_path(@referential, route_section), method: :delete, data: { confirm: t('route_sections.actions.destroy_confirm') }, class: "remove" %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+
+</table>
+
+<div class="pagination">
+ <%= will_paginate @route_sections, :container => false, renderer: RemoteBootstrapPaginationLinkRenderer %>
+</div>
diff --git a/app/views/route_sections/new.html.erb b/app/views/route_sections/new.html.erb
new file mode 100644
index 000000000..1ff3c74d0
--- /dev/null
+++ b/app/views/route_sections/new.html.erb
@@ -0,0 +1,3 @@
+<%= title_tag t('route_sections.new.title') %>
+
+<%= render "form" %>
diff --git a/app/views/route_sections/show.html.erb b/app/views/route_sections/show.html.erb
new file mode 100644
index 000000000..61c7c8149
--- /dev/null
+++ b/app/views/route_sections/show.html.erb
@@ -0,0 +1,28 @@
+<%= title_tag t('.title') %>
+
+<div class="route_section">
+ <%= @map.to_html %>
+
+ <div class="summary">
+ <p>
+ <label><%= @route_section.human_attribute_name("departure") %>: </label>
+ <%= @route_section.departure.name %>
+ </p>
+ <p>
+ <label><%= @route_section.human_attribute_name("arrival") %>: </label>
+ <%= @route_section.arrival.name %>
+ </p>
+ <p>
+ <label><%= @route_section.human_attribute_name("distance") %>: </label>
+ <%= "#{@route_section.distance.round}m" if @route_section.distance %>
+ </p>
+ </div>
+</div>
+
+<% content_for :sidebar do %>
+<ul class="actions">
+ <li><%= link_to t('route_sections.actions.edit'), edit_referential_route_section_path(@referential, @route_section), :class => "edit" %></li>
+ <li><%= link_to t('route_sections.actions.destroy'), referential_route_section_path(@referential, @route_section), :method => :delete, :data => {:confirm => t('route_sections.actions.destroy_confirm')}, :class => "remove" %></li>
+</ul>
+ <%= creation_tag(@route_section) %>
+<% end %>
diff --git a/app/views/route_sections/show.kml.erb b/app/views/route_sections/show.kml.erb
new file mode 100644
index 000000000..0d41f0fdb
--- /dev/null
+++ b/app/views/route_sections/show.kml.erb
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2">
+ <Document>
+ <Placemark id="route-section-<%= @route_section.id %>">
+ <%= @route_section.geometry(params[:mode]).kml_representation.html_safe %>
+ </Placemark>
+ </Document>
+</kml>
diff --git a/app/views/route_sections_selectors/_selection.js.erb b/app/views/route_sections_selectors/_selection.js.erb
new file mode 100644
index 000000000..70d03cf75
--- /dev/null
+++ b/app/views/route_sections_selectors/_selection.js.erb
@@ -0,0 +1,28 @@
+<div>
+ <span class="departure">
+ <label><%= @route_section.human_attribute_name("departure") %>:</label>
+ <%= link_to @route_section.departure.name, referential_stop_area_path(@referential, @route_section.departure) %>
+ </span>
+
+ <span class="arrival">
+ <label><%= @route_section.human_attribute_name("arrival") %>:</label>
+ <%= link_to @route_section.arrival.name, referential_stop_area_path(@referential, @route_section.arrival) %>
+ </span>
+
+ <span class="distance">
+ <label><%= @route_section.human_attribute_name("distance") %>:</label>
+ <%= "#{@route_section.distance.to_i} m" if @route_section.distance > 0 %>
+ </span>
+
+ <% if @route_section.via_count > 0 %>
+ <span class="via_count">
+ <label><%= @route_section.human_attribute_name("via_count") %>:</label>
+ <%= @route_section.via_count if @route_section.via_count > 0 %>
+ </span>
+ <% end %>
+
+ <span class="actions">
+ <%= link_to_edit_route_section @route_section %>
+ <%= link_to_create_route_section @route_section.departure, @route_section.arrival %>
+ </span>
+</div>
diff --git a/app/views/route_sections_selectors/edit.html.erb b/app/views/route_sections_selectors/edit.html.erb
new file mode 100644
index 000000000..a60b8b95b
--- /dev/null
+++ b/app/views/route_sections_selectors/edit.html.erb
@@ -0,0 +1,48 @@
+<%= title_tag t('.title', journey_pattern: journey_name(@journey_pattern)) %>
+
+<div class = "large-map">
+ <%= @map.to_html(no_fullscreen: true) %>
+</div>
+
+<%= semantic_form_for resource, url: referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern), method: :put do |form| %>
+
+<h3><%= t('.selection.title') %></h3>
+
+<div id="map-selection" style="display: none">
+ <div>
+ </div>
+</div>
+
+<div id="empty-map-selection">
+ <%= t('.no_selection') %>
+</div>
+
+<h3><%= t('.form.title') %></h3>
+
+<table class="table table-hover table-striped">
+ <tbody>
+ <%= form.fields_for :sections do |section_form| %>
+ <tr>
+ <td><%= link_to section_form.object.departure.name, referential_stop_area_path(@referential, section_form.object.departure) %></td>
+ <td class="route_section">
+ <% if section_form.object.candidates.present? %>
+ <%= section_form.input :route_section_id, as: :select, label: false, collection: section_form.object.candidates, include_blank: t('.no_selection') %>
+ <% else %>
+ <%= t('.no_candidate') %>
+ <% end %>
+ </td>
+ <td class="action">
+ <%= link_to_edit_route_section section_form.object.route_section %>
+ <%= link_to_create_route_section section_form.object.departure, section_form.object.arrival %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+</table>
+
+<%= form.actions do %>
+ <%= form.action :submit, as: :button, label: t('.submit') %>
+ <%= form.action :cancel, as: :link, url: referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern) %>
+<% end %>
+
+<% end %>
diff --git a/app/views/routes/_route.html.erb b/app/views/routes/_route.html.erb
index 0fee47cd1..d428d5b38 100644
--- a/app/views/routes/_route.html.erb
+++ b/app/views/routes/_route.html.erb
@@ -22,26 +22,33 @@
</div>
</div>
<div class="panel-body">
- <p>
- <% if route.journey_patterns.size > 0 %>
- <i class="fa fa-clock-o"></i><%= link_to t("vehicle_journeys.actions.index"), referential_line_route_vehicle_journeys_path(@referential, @line, route) %>
- <% else %>
- <%= t('.no_journey_pattern')%>
- <% end%>
- </p>
- <p>
- <% if route.opposite_route %>
- <%= fonticon_wayback(route.opposite_route.wayback) %><%= link_to truncate(route.opposite_route.name, :length => 30), referential_line_route_path( @referential, @line, route.opposite_route) %>
- <% else %>
- <%= t('.no_opposite') %>
+ <p>
+ <% if route.journey_patterns.size > 0 %>
+ <i class="fa fa-clock-o"></i>
+ <%= link_to t("vehicle_journeys.actions.index"), referential_line_route_vehicle_journeys_path(@referential, @line, route) %>
+ <% else %>
+ <%= t('.no_journey_pattern')%>
+ <% end%>
+ </p>
+ <% if exist_vehicle_journey_frequencies?(route) %>
+ <p>
+ <i class="fa fa-clock-o"></i>
+ <%= link_to t("vehicle_journey_frequencies.actions.index"), referential_line_route_vehicle_journey_frequencies_path(@referential, @line, route) %>
+ </p>
<% end %>
- </p>
- <p>
- <% if ! route.direction.blank? %>
- <%= route.human_attribute_name('direction_code') %> : <%= t('directions.label.'+route.direction_code) %>
- <% else %>
- <br>
- <% end %>
- </p>
+ <p>
+ <% if route.opposite_route %>
+ <%= fonticon_wayback(route.opposite_route.wayback) %><%= link_to truncate(route.opposite_route.name, :length => 30), referential_line_route_path( @referential, @line, route.opposite_route) %>
+ <% else %>
+ <%= t('.no_opposite') %>
+ <% end %>
+ </p>
+ <p>
+ <% if ! route.direction.blank? %>
+ <%= route.human_attribute_name('direction_code') %> : <%= t('directions.label.'+route.direction_code) %>
+ <% else %>
+ <br>
+ <% end %>
+ </p>
</div>
</div>
diff --git a/app/views/shared/_form_messages.html.erb b/app/views/shared/_form_messages.html.erb
new file mode 100644
index 000000000..6eca2e69f
--- /dev/null
+++ b/app/views/shared/_form_messages.html.erb
@@ -0,0 +1,7 @@
+<% if errors.any? %>
+ <% errors.full_messages.each do |message| %>
+ <div class="alert alert-danger" role="alert">
+ <%= message %>
+ </div>
+ <% end %>
+<% end %>
diff --git a/app/views/shared/_header.erb b/app/views/shared/_header.erb
index d1e8dd2ce..9d53d807f 100644
--- a/app/views/shared/_header.erb
+++ b/app/views/shared/_header.erb
@@ -65,6 +65,14 @@
<span class="badge pull-right"><%= @referential.time_tables.size %></span><%= Referential.human_attribute_name("time_tables") %>
<% end %>
</li>
+ <li><%= link_to referential_route_sections_path(@referential) do %>
+ <span class="badge pull-right"><%= @referential.route_sections.size %></span><%= Referential.human_attribute_name("route_sections") %>
+ <% end %>
+ </li>
+ <li><%= link_to referential_timebands_path(@referential) do %>
+ <span class="badge pull-right"><%= @referential.timebands.size %></span><%= Referential.human_attribute_name("timebands") %>
+ <% end %>
+ </li>
</ul>
</li>
<li><%= link_to Referential.human_attribute_name("imports"), referential_imports_path(@referential) %></li>
diff --git a/app/views/shared/_ie_report.html.erb b/app/views/shared/_ie_report.html.erb
index f4f6fa043..11a49879b 100644
--- a/app/views/shared/_ie_report.html.erb
+++ b/app/views/shared/_ie_report.html.erb
@@ -15,13 +15,13 @@
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="ie_tab_line">
- <%= render partial: 'shared/ie_report_line', locals: { job: job, type: (defined?(type) ? type : :default) } %>
+ <%= render partial: 'shared/ie_report_line', locals: { job: job, line_items: line_items, type: (defined?(type) ? type : :default) } %>
</div>
<div role="tabpanel" class="tab-pane" id="ie_tab_file">
<%= render partial: 'shared/ie_report_file', locals: { job: job } %>
</div>
</div>
<% else %>
- <%= render partial: 'shared/ie_report_line', locals: { job: job, type: (defined?(type) ? type : :default) } %>
+ <%= render partial: 'shared/ie_report_line', locals: { job: job, line_items: line_items, type: (defined?(type) ? type : :default) } %>
<% end %>
</div>
diff --git a/app/views/shared/_ie_report_file.html.erb b/app/views/shared/_ie_report_file.html.erb
index 20e4bb659..fdd97f128 100644
--- a/app/views/shared/_ie_report_file.html.erb
+++ b/app/views/shared/_ie_report_file.html.erb
@@ -5,7 +5,7 @@
<p>
<form class="form-inline">
<div class="form-group">
- <label><%= t("shared.ie_report.html.search") %></label>
+ <label><%= t("shared.ie_report.search") %></label>
<input id="filter-file" type="text" class="form-control">
</div>
<div class="form-group">
diff --git a/app/views/shared/_ie_report_line.html.erb b/app/views/shared/_ie_report_line.html.erb
index 8c635baa8..2f5332e5b 100644
--- a/app/views/shared/_ie_report_line.html.erb
+++ b/app/views/shared/_ie_report_line.html.erb
@@ -12,7 +12,7 @@
<p>
<form class="form-inline">
<div class="form-group">
- <label><%= t("shared.ie_report.html.search") %></label>
+ <label><%= t("shared.ie_report.search") %></label>
<input id="filter-line" type="text" class="form-control">
</div>
<div class="form-group">
@@ -25,7 +25,7 @@
</div>
</form>
</p>
- <table id="table-line" class="table table-hover table-striped data-table toggle-circle toggle-medium" data-filter="#filter-line" data-page-size="20">
+ <table class="table table-hover table-striped data-table toggle-circle toggle-medium" data-filter="#filter-line" id="table-line" data-page-size="20"<% if line_items.respond_to?(:total_pages) %> data-no-pagination="true"<% end %>>
<thead>
<tr>
<th><%= t(".table.line.state") %></th>
@@ -41,7 +41,7 @@
</tr>
</thead>
<tbody>
- <% job.report.line_items.each_with_index do |line_item, index| %>
+ <% line_items.each_with_index do |line_item, index| %>
<tr>
<td data-value="<%=line_item.status%>"><%= line_item.status ? font_awesome_classic_tag("fa-check") : font_awesome_classic_tag("fa-times") %></td>
<td><%= line_item.name %></td>
@@ -58,7 +58,13 @@
</tbody>
<tfoot>
<tr>
- <td colspan="5"><ul class="pagination pagination-centered"></ul></td>
+ <td colspan="10">
+ <% if line_items.respond_to?(:total_pages) %>
+ <%= will_paginate line_items, renderer: BootstrapPagination::Rails %>
+ <% else %>
+ <ul class="pagination pagination-centered hide-if-no-paging"></ul>
+ <% end %>
+ </td>
</tr>
</tfoot>
</table>
diff --git a/app/views/stop_areas/_form.html.erb b/app/views/stop_areas/_form.html.erb
index e34253828..e977a0279 100644
--- a/app/views/stop_areas/_form.html.erb
+++ b/app/views/stop_areas/_form.html.erb
@@ -1,29 +1,28 @@
<%= semantic_form_for [@referential, @stop_area] do |form| %>
<div class="row">
- <div class="col-md-6">
+ <div class="container-fluid">
+ <% if !manage_itl && @map %>
+ <%= @map.to_html %>
+ <% end %>
<%= form.inputs do %>
<%= form.input :id, :as => :hidden %>
<%= form.input :name, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.name")} %>
<%= form.input :stop_area_type, :as => :select, :input_html => { :disabled => !@stop_area.new_record? }, :collection => Chouette::StopArea.stop_area_types, :include_blank => false, :member_label => Proc.new { |stop_area_type| t("area_types.label.#{stop_area_type}") } %>
<div class="location_info">
<h3><%= t("stop_areas.stop_area.localisation") %></h3>
- <div id="prefetch">
- <label><%= t('.geolocalize') %></label>
- <input class="typeahead form-control input-lg" maxlength="255" type="text" placeholder="<%= t('.address') %>" />
- </div>
- <% unless @referential.projection_type_label.empty? %>
- <%= form.input :projection_xy, :label => t("projection_xy", :projection => @referential.projection_type_label), :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.projection_xy")} %>
- <% end %>
- <%= form.input :coordinates, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.coordinates")} %>
- <%= form.input :street_name %>
- <%= form.input :country_code %>
- <%= form.input :zip_code, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.zip_code")} %>
- <%= form.input :city_name, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.city_name")} %>
- <% end %>
- </div>
- <div class="col-md-6">
- <% if !manage_itl && @map %>
- <%= @map.to_html %>
+ <div id="prefetch">
+ <label><%= t('.geolocalize') %></label>
+ <input class="typeahead form-control input-lg" maxlength="255" type="text" placeholder="<%= t('.address') %>" />
+ </div>
+ <% unless @referential.projection_type_label.empty? %>
+ <%= form.input :projection_xy, :label => t("projection_xy", :projection => @referential.projection_type_label), :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.projection_xy")} %>
+ <% end %>
+ <%= form.input :coordinates, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.coordinates")} %>
+ <%= form.input :street_name %>
+ <%= form.input :country_code, required: format_restriction_for_locales(@referential) == '.hub' %>
+ <%= form.input :zip_code, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.zip_code")} %>
+ <%= form.input :city_name, required: format_restriction_for_locales(@referential) == '.hub', :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.city_name")} %>
+ </div>
<% end %>
</div>
</div>
@@ -31,7 +30,7 @@
<h3><%= t("stop_area.general") %></h3>
<%= form.inputs do %>
<%= form.input :objectid, :required => !@stop_area.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.objectid")} %>
- <%= form.input :registration_number, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.registration_number")} %>
+ <%= form.input :registration_number, required: format_restriction_for_locales(@referential) == '.hub', :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.registration_number")} %>
<%= form.input :fare_code, :as => :number %>
<%= form.input :nearest_topic_name, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.nearest_topic_name")} %>
<%= form.input :comment, :as => :text, :input_html => { :rows => 5, :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.comment") } %>
@@ -43,9 +42,9 @@
<h3><%= t("stop_areas.stop_area.accessibility") %></h3>
<%= form.inputs do %>
<% if !manage_itl %>
- <%= form.input :mobility_restricted_suitability,:as => :boolean %>
- <%= form.input :stairs_availability,:as => :boolean %>
- <%= form.input :lift_availability,:as => :boolean %>
+ <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
+ <%= form.input :stairs_availability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
+ <%= form.input :lift_availability, :as => :select, :collection => [[t("true"), true], [t("false"), false]], :include_blank => true %>
<% end %>
<% end %>
</div>
diff --git a/app/views/stop_areas/show.html.erb b/app/views/stop_areas/show.html.erb
index 7ca59cf70..6a34f808c 100644
--- a/app/views/stop_areas/show.html.erb
+++ b/app/views/stop_areas/show.html.erb
@@ -48,19 +48,32 @@
<p>
<label><%= @stop_area.human_attribute_name("stop_area_type") %>: </label>
<%= t("area_types.label.#{@stop_area.stop_area_type}") %>
+ <i class="fa fa-info-circle" data-toggle="tooltip" data-placement="right" title="<%= t('.not_editable') %>"></i>
</p>
<% if !manage_itl %>
<p>
<label><%= @stop_area.human_attribute_name("mobility_restricted_suitability") %>: </label>
- <%= t((@stop_area.mobility_restricted_suitability == true).to_s) %>
+ <% if (!@stop_area.mobility_restricted_suitability.nil?) %>
+ <%= t((@stop_area.mobility_restricted_suitability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p>
<label><%= @stop_area.human_attribute_name("stairs_availability") %>: </label>
- <%= t((@stop_area.stairs_availability == true).to_s) %>
+ <% if (!@stop_area.stairs_availability.nil?) %>
+ <%= t((@stop_area.stairs_availability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p>
<label><%= @stop_area.human_attribute_name("lift_availability") %>: </label>
- <%= t((@stop_area.lift_availability == true).to_s) %>
+ <% if (!@stop_area.lift_availability.nil?) %>
+ <%= t((@stop_area.lift_availability == true).to_s) %>
+ <% else %>
+ <%=t("unknown") %>
+ <% end %>
</p>
<p> <label><%= t('stop_areas.show.geographic_data') %> </label></p>
<% if @stop_area.long_lat_type == nil %>
@@ -140,7 +153,7 @@
<li><%= link_to t('stop_areas.actions.clone_as_parent'), new_referential_stop_area_stop_area_copy_path(@referential, @stop_area, :hierarchy => "parent"), :class => "clone" %></li>
<% end %>
<% if manage_children %>
- <li></i></font><%= link_to t('stop_areas.actions.add_children'), add_children_referential_stop_area_path(@referential, @stop_area), :class => "children" %></li>
+ <li><%= link_to t('stop_areas.actions.add_children'), add_children_referential_stop_area_path(@referential, @stop_area), :class => "children" %></li>
<li><%= link_to t('stop_areas.actions.clone_as_child'), new_referential_stop_area_stop_area_copy_path(@referential, @stop_area, :hierarchy => "child"), :class => "clone" %></li>
<% end %>
</ul>
diff --git a/app/views/timebands/_form.html.erb b/app/views/timebands/_form.html.erb
new file mode 100644
index 000000000..bfa32212e
--- /dev/null
+++ b/app/views/timebands/_form.html.erb
@@ -0,0 +1,12 @@
+<%= semantic_form_for [@referential, @timeband] do |form| %>
+ <%= form.inputs do %>
+ <%= form.input :name %>
+ <%= form.input :start_time %>
+ <%= form.input :end_time %>
+ <% end %>
+
+ <%= form.actions do %>
+ <%= form.action :submit, :as => :button %>
+ <%= form.action :cancel, :as => :link %>
+ <% end %>
+<% end %>
diff --git a/app/views/timebands/_sidebar.html.erb b/app/views/timebands/_sidebar.html.erb
new file mode 100644
index 000000000..8ffa16dca
--- /dev/null
+++ b/app/views/timebands/_sidebar.html.erb
@@ -0,0 +1,11 @@
+<% content_for :sidebar do %>
+ <ul class="actions">
+ <li><%= link_to t('timebands.actions.new'), new_referential_timeband_path(@referential), :class => "add" %></li>
+ <% if @timeband %>
+ <li><%= link_to t('timebands.actions.edit'), edit_referential_timeband_path(@referential, @timeband), :class => "edit" %></li>
+ <li><%= link_to t('timebands.actions.destroy'), referential_timeband_path(@referential, @timeband), :method => :delete, :data => {:confirm => t('timebands.actions.destroy_confirm')}, :class => "remove" %></li>
+ <% end %>
+ </ul>
+<% end %>
+
+
diff --git a/app/views/timebands/edit.html.erb b/app/views/timebands/edit.html.erb
new file mode 100644
index 000000000..bc2c73ace
--- /dev/null
+++ b/app/views/timebands/edit.html.erb
@@ -0,0 +1,3 @@
+<%= title_tag t('timebands.edit.title', timeband: @timeband.name) %>
+
+<%= render "form" %>
diff --git a/app/views/timebands/index.html.erb b/app/views/timebands/index.html.erb
new file mode 100644
index 000000000..54be52675
--- /dev/null
+++ b/app/views/timebands/index.html.erb
@@ -0,0 +1,29 @@
+<%= title_tag t('timebands.index.title') %>
+
+<% if @timebands.any? %>
+ <table class="table table-striped table-condensed">
+ <thead>
+ <tr>
+ <th><%= t('activerecord.attributes.timeband.name') %></th>
+ <th><%= t('activerecord.attributes.timeband.start_time') %></th>
+ <th><%= t('activerecord.attributes.timeband.end_time') %></th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @timebands.each do |timeband| %>
+ <tr>
+ <td><%= link_to timeband.name, referential_timeband_path(@referential, timeband) %></td>
+ <td><%= l(timeband.start_time, format: :hour) %></td>
+ <td><%= l(timeband.end_time, format: :hour) %></td>
+ <td>
+ <%= link_to '', edit_referential_timeband_path(@referential, timeband), :class => "edit" %>
+ <%= link_to '', referential_timeband_path(@referential, timeband), :method => :delete, :data => {:confirm => t('timebands.actions.destroy_confirm')}, :class => "remove" %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+<% end %>
+
+<%= render 'sidebar' %>
diff --git a/app/views/timebands/new.html.erb b/app/views/timebands/new.html.erb
new file mode 100644
index 000000000..c016325d0
--- /dev/null
+++ b/app/views/timebands/new.html.erb
@@ -0,0 +1,3 @@
+<%= title_tag t('timebands.new.title') %>
+
+<%= render "form" %>
diff --git a/app/views/timebands/show.html.erb b/app/views/timebands/show.html.erb
new file mode 100644
index 000000000..1a6171712
--- /dev/null
+++ b/app/views/timebands/show.html.erb
@@ -0,0 +1,12 @@
+<%= title_tag t( 'timebands.show.title', timeband: @timeband.name )%>
+
+<div class="summary">
+ <p>
+ <label><%= @timeband.name %>: </label>
+ <%= l(@timeband.start_time, format: :hour) %>
+ -
+ <%= l(@timeband.end_time, format: :hour) %>
+ </p>
+</div>
+
+<%= render 'sidebar' %>
diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb
index 74de43cef..ed9d3d0ad 100644
--- a/app/views/users/_form.html.erb
+++ b/app/views/users/_form.html.erb
@@ -1,10 +1,10 @@
<%= simple_form_for [:organisation, @user], html: {class: 'form-horizontal' } do |form| %>
- <%= form.input :name %>
+ <%= form.input :name %>
<%= form.input :email %>
-
+
<div class="form-actions">
- <%= link_to t("cancel"), organisation_path, :class => "btn btn-default" %>
<%= form.button :submit, :as => :button %>
+ <%= link_to t("cancel"), organisation_path %>
</div>
<% end %>
diff --git a/app/views/vehicle_journey_frequencies/_form_footer.html.erb b/app/views/vehicle_journey_frequencies/_form_footer.html.erb
new file mode 100644
index 000000000..d38f8af0e
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_form_footer.html.erb
@@ -0,0 +1,14 @@
+<% if vehicle_journey.new_record? %>
+ <%= javascript_include_tag new_referential_line_route_vehicle_journey_frequency_path(
+ @referential,
+ @line,
+ @route,
+ format: :js) %>
+<% else %>
+ <%= javascript_include_tag edit_referential_line_route_vehicle_journey_frequency_path(
+ @referential,
+ @line,
+ @route,
+ vehicle_journey,
+ format: :js) %>
+<% end %>
diff --git a/app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..e002f746e
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,60 @@
+<li class="input">
+ <%= form.label vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids), class: 'label' %>
+ <table class="table-striped ce-TimeBandFormTable">
+ <thead>
+ <tr>
+ <th>
+ <%= t('vehicle_journeys.form.stop_title') %>
+ </th>
+ <th></th>
+ <th>
+ <%= t('vehicle_journeys.form.arrival') %>
+ </th>
+ <th>
+ <%= t('vehicle_journeys.form.departure') %>
+ </th>
+ </tr>
+ </thead>
+ <tbody class="journey_pattern_dependent_list">
+ <%= render partial: 'vehicle_journey_at_stop_fields',
+ collection: vehicle_journey.vehicle_journey_at_stops, as: :vehicle_journey_at_stop,
+ locals: { vehicle_journey_at_stops_size: vehicle_journey.vehicle_journey_at_stops.size } %>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td></td>
+ <td></td>
+ <td>
+ <%= button_tag 'data-ce-action' => 'to_departures', class: 'ce-hide btn btn-primary' do %>
+ <%= t('vehicle_journeys.form.to_departures').html_safe %>
+ <i class="fa fa-angle-double-right"></i>
+ <% end %>
+ <td>
+ <%= button_tag 'data-ce-action' => 'to_arrivals', class: 'ce-hide btn btn-primary' do %>
+ <i class="fa fa-angle-double-left"></i>
+ <%= t('vehicle_journeys.form.to_arrivals').html_safe %>
+ <% end %>
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+</li>
+
+<li class="input">
+ <%= form.label vehicle_journey.human_attribute_name(:journey_frequency_ids), class: 'label' %>
+ <ul class="ce-FrequencyFormFields">
+ <li><%= t('activerecord.attributes.journey_frequency.timeband') %></li>
+ <li><%= t('activerecord.attributes.journey_frequency.first_departure_time') %></li>
+ <li><%= t('activerecord.attributes.journey_frequency.last_departure_time') %></li>
+ <li><%= t('activerecord.attributes.journey_frequency.scheduled_headway_interval') %></li>
+ <li></li>
+ <li></li>
+ </ul>
+ <% i = 0 %>
+ <%= form.semantic_fields_for :journey_frequencies do |journey_frequency| %>
+ <%= render 'journey_frequency_fields', f: journey_frequency, no_destroy: ((i += 1) == 1 ? true : false) %>
+ <% end %>
+ <div class="actions-add-fields">
+ <%= link_to_add_association t('journey_frequencies.form.add_line'), form, :journey_frequencies, class: 'btn btn-primary' %>
+ </div>
+</li>
diff --git a/app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb b/app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb
new file mode 100644
index 000000000..221bf2f67
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb
@@ -0,0 +1,22 @@
+<% no_destroy = false unless local_assigns[:no_destroy] %>
+<div class="nested-fields">
+ <ul class="ce-FrequencyFormFields">
+ <%= f.input :timeband_id, as: :search_timeband, json: referential_autocomplete_timebands_path(@referential, format: :json),
+ hint_text: t('search_hint'), no_result_text: t('no_result_text'), searching_text: t('searching_term'), label: false,
+ input_html: { :"data-pre" => Rabl::Renderer.new( 'autocomplete_timebands/index',
+ Chouette::Timeband.where(id: f.object.timeband_id), view_path: 'app/views',
+ format: :json, scope: :self ).render } %>
+ <%= f.input :first_departure_time, label: false %>
+ <%= f.input :last_departure_time, label: false %>
+ <%= f.input :scheduled_headway_interval, label: false %>
+ <%= f.input :exact_time, label: t('activerecord.attributes.journey_frequency.exact_time') %>
+ <li>
+ <label class="label"></label>
+ <% unless no_destroy %>
+ <%= link_to_remove_association f do %>
+ <i class="fa fa-trash"></i>
+ <% end %>
+ <% end %>
+ </li>
+ </ul>
+</div>
diff --git a/app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb b/app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb
new file mode 100644
index 000000000..328c702f9
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb
@@ -0,0 +1,28 @@
+<h3><%= t('vehicle_journeys.show.journey_frequencies') %></h3>
+<div class="journey_frequencies content">
+ <table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th><%= t('activerecord.attributes.journey_frequency.timeband') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.first_departure_time') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.last_departure_time') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.scheduled_headway_interval') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.exact_time') %></th>
+ </tr>
+ <thead>
+ <tbody>
+ <% @vehicle_journey_frequency.journey_frequencies.each do |journey_frequency| %>
+ <tr class="<%= cycle :odd, :even %>">
+ <td>
+ <%= link_to journey_frequency.timeband.fullname,
+ referential_timeband_path(@referential, journey_frequency.timeband) if journey_frequency.timeband %>
+ </td>
+ <td><%= l(journey_frequency.first_departure_time, format: :hour) %></td>
+ <td><%= l(journey_frequency.last_departure_time, format: :hour) %></td>
+ <td><%= l(journey_frequency.scheduled_headway_interval, format: :hour) %></td>
+ <td><%= '<i class="fa fa-check"></i>'.html_safe if journey_frequency.exact_time %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
diff --git a/app/views/vehicle_journey_frequencies/_show_sidebar.html.erb b/app/views/vehicle_journey_frequencies/_show_sidebar.html.erb
new file mode 100644
index 000000000..2a7be143c
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_show_sidebar.html.erb
@@ -0,0 +1,23 @@
+<% content_for :sidebar do %>
+ <ul class="actions">
+ <li>
+ <%= link_to t('vehicle_journeys.actions.new'),
+ new_referential_line_route_vehicle_journey_path(@referential, @line, @route), class: "add" %>
+ </li>
+ <li>
+ <%= link_to t('vehicle_journeys.actions.new_frequency'),
+ new_referential_line_route_vehicle_journey_frequency_path(@referential, @line, @route), class: "add" %>
+ </li>
+ <li>
+ <%= link_to t('vehicle_journeys.actions.edit_frequency'),
+ edit_referential_line_route_vehicle_journey_frequency_path(@referential, @line, @route, @vehicle_journey_frequency),
+ class: "edit" %>
+ </li>
+ <li>
+ <%= link_to t('vehicle_journeys.actions.destroy'),
+ referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey_frequency),
+ method: :delete, data: { confirm: t('vehicle_journeys.actions.destroy_confirm') }, class: "remove" %>
+ </li>
+ </ul>
+ <%= creation_tag(@vehicle_journey_frequency) %>
+<% end %>
diff --git a/app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..0a91a8af3
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,29 @@
+<div class="vehicle_journey_at_stops content">
+ <table class="table-striped ce-TimeBandFormTable">
+ <thead>
+ <tr>
+ <th class="stop title" ><%= t('vehicle_journeys.show.stop_title') %></th>
+ <th></th>
+ <th class="hour title"><%= t('vehicle_journeys.show.arrival') %></th>
+ <th class="hour title"><%= t('vehicle_journeys.show.departure') %></th>
+ </tr>
+ <thead>
+ <tbody>
+ <% @vehicle_journey_frequency.vehicle_journey_at_stops.each do |vjas| %>
+ <tr class="<%= cycle :odd, :even %>">
+ <td><%= link_to vjas.stop_point.stop_area.name, [@referential, vjas.stop_point.stop_area] %></td>
+ <td class="ce-TimeBandFormTable-circleLine">
+ <span class="ce-TimeBandFormTable-circle"></span>
+ <span class="ce-TimeBandFormTable-line"></span>
+ </td>
+ <td class="hour <%= 'missing' if vjas.arrival_time.nil? %>">
+ <%= l(vjas.arrival_time, format: :hour) if vjas.arrival_time %>
+ </td>
+ <td class="hour <%= 'missing' if vjas.departure_time.nil? %>">
+ <%= l(vjas.departure_time, format: :hour) if vjas.departure_time %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
diff --git a/app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb b/app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb
new file mode 100644
index 000000000..5a4ed7382
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb
@@ -0,0 +1,52 @@
+<%
+ vjas = vehicle_journey_at_stop
+ tab_counter_arrival = 2 * vehicle_journey_at_stop_counter + 100
+ tab_counter_departure = (vehicle_journey_at_stops_size * 2) + 2 * vehicle_journey_at_stop_counter + 100
+%>
+<tr class="time input optional <%= 'no_stop' if vjas._destroy %> <%= cycle :odd, :even %>" >
+ <td>
+ <%= {
+ id: vjas.id,
+ _destroy: (vjas._destroy ? 1 : 0),
+ stop_point_id: vjas.stop_point_id,
+ :'departure_time(3i)' => 1,
+ :'departure_time(2i)' => 1,
+ :'departure_time(1i)' => 1,
+ :'arrival_time(3i)' => 1,
+ :'arrival_time(2i)' => 1,
+ :'arrival_time(1i)' => 2000
+ }.map{ |k, v|
+ "<input name=\"vehicle_journey_frequency[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][#{k}]\"
+ type=\"hidden\" value=\"#{v}\">" }.join("\n").html_safe %>
+
+ <%= vjas.stop_point.stop_area.name %>
+ </td>
+ <td class="ce-TimeBandFormTable-circleLine">
+ <span class="ce-TimeBandFormTable-circle"></span>
+ <span class="ce-TimeBandFormTable-line"></span>
+ </td>
+ <td class="arrival_time <%= 'missing' unless vjas.arrival_time %> <%= 'invalid_position' if vjas.errors[:arrival_time].present? %>">
+ <%= select_hour(vjas.arrival_time ? vjas.arrival_time.hour : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][arrival_time(4i)]"
+ }, class: 'hour', tabindex: tab_counter_arrival + 1) %>
+ <%= select_minute(vjas.arrival_time ? vjas.arrival_time.min : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][arrival_time(5i)]"
+ }, class: 'minute', tabindex: tab_counter_arrival + 2) %>
+ </td>
+ <td class="departure_time <%= 'missing' unless vjas.departure_time %> <%= 'invalid_position' if vjas.errors[:departure_time].present? %>">
+ <%= select_hour(vjas.departure_time ? vjas.departure_time.hour : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][departure_time(4i)]"
+ }, class: 'hour', tabindex: tab_counter_departure + 1) %>
+ <%= select_minute(vjas.departure_time ? vjas.departure_time.min : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][departure_time(5i)]"
+ }, class: 'minute', tabindex: tab_counter_departure + 2) %>
+ </td>
+</tr>
diff --git a/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb b/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb
new file mode 100644
index 000000000..c023f9cfb
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb
@@ -0,0 +1,22 @@
+<ul class="ce-VehicleJourneyFrequenciesMatrix">
+<% @vehicle_journeys.each do |vj| %>
+ <li>
+ <ul>
+ <% vj.journey_frequencies.each do |jf| %>
+ <% left, width = journey_frequency_percent(jf) %>
+ <li style="left:<%= left %>%;width:<%= width %>%"
+ data-style="primary" data-container="body" rel="popover" data-toggle="popover"
+ data-title='<%= link_to(vehicle_title(vj, jf), [@referential, @line, @route, vj] ) %>
+ <%= link_to('<span class="fa fa-pencil"></span>'.html_safe,
+ send("edit_referential_line_route_vehicle_journey#{'_frequency' if vj.frequency?}_path", @referential, @line, @route, vj),
+ :class => "btn btn-default btn-sm" ) %>'
+ data-placement= "top"
+ data-content='<%= render 'vehicle_journeys/show_popover', { vehicle_journey: vj } %>'>
+ <span class="ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime"><%= l(jf.first_departure_time, format: :hour) %></span>
+ <span class="ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime"><%= l(jf.last_departure_time, format: :hour) %></span>
+ </li>
+ <% end %>
+ </ul>
+ </li>
+<% end %>
+</ul>
diff --git a/app/views/vehicle_journey_frequencies/edit.html.erb b/app/views/vehicle_journey_frequencies/edit.html.erb
new file mode 100644
index 000000000..1bc1e6d88
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/edit.html.erb
@@ -0,0 +1,7 @@
+<%= title_tag edit_vehicle_title(@vehicle_journey_frequency) %>
+
+<%= render 'vehicle_journeys/form', vehicle_journey: @vehicle_journey_frequency,
+ form_url: referential_line_route_vehicle_journey_frequency_path(@referential,
+ @line,
+ @route,
+ id: @vehicle_journey_frequency) %>
diff --git a/app/views/vehicle_journey_frequencies/edit.js.erb b/app/views/vehicle_journey_frequencies/edit.js.erb
new file mode 100644
index 000000000..f5aaf8ad7
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/edit.js.erb
@@ -0,0 +1,10 @@
+$(document).ready(function() {
+ $("#vehicle_journey_frequency_journey_pattern_id").change(
+ function(){
+ var url = "<%= select_journey_pattern_referential_line_route_vehicle_journey_path( @referential, @line, @route, @vehicle_journey_frequency)%>?journey_pattern_id="+
+ $("#vehicle_journey_frequency_journey_pattern_input select option:selected").attr("value");
+ url += "&journey_category=frequency";
+ $.get(url);
+ }
+ );
+});
diff --git a/app/views/vehicle_journey_frequencies/new.html.erb b/app/views/vehicle_journey_frequencies/new.html.erb
new file mode 100644
index 000000000..677605276
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/new.html.erb
@@ -0,0 +1,6 @@
+<%= title_tag t('vehicle_journeys.new.title_frequency') %>
+
+<%= render 'vehicle_journeys/form', vehicle_journey: @vehicle_journey_frequency,
+ form_url: referential_line_route_vehicle_journey_frequencies_path(@referential,
+ @line,
+ @route) %>
diff --git a/app/views/vehicle_journey_frequencies/new.js.erb b/app/views/vehicle_journey_frequencies/new.js.erb
new file mode 100644
index 000000000..b5fc75aef
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/new.js.erb
@@ -0,0 +1,13 @@
+$(document).ready(function() {
+ $("#vehicle_journey_frequency_journey_pattern_id").change(
+ function(){
+ var vehicle_journey_journey_pattern_id = $("#vehicle_journey_frequency_journey_pattern_input select option:selected").attr("value");
+ if (vehicle_journey_journey_pattern_id > 0) {
+ var url = "<%= referential_line_route_journey_patterns_path(@referential.id,@line.id,@route.id) %>";
+ url = url + "/" + vehicle_journey_journey_pattern_id +
+ "/new_vehicle_journey?journey_category=frequency";
+ $.get(url);
+ }
+ }
+ );
+});
diff --git a/app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb b/app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb
new file mode 100644
index 000000000..8fe20ed37
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb
@@ -0,0 +1,5 @@
+$('.journey_pattern_dependent_list').html('<%= escape_javascript(
+ render(partial: 'vehicle_journey_frequencies/vehicle_journey_at_stop_fields',
+ collection: @vehicle_journey.vehicle_journey_at_stops,
+ as: :vehicle_journey_at_stop,
+ locals: { vehicle_journey_at_stops_size: @vehicle_journey.vehicle_journey_at_stops.size })).html_safe %>');
diff --git a/app/views/vehicle_journey_frequencies/show.html.erb b/app/views/vehicle_journey_frequencies/show.html.erb
new file mode 100644
index 000000000..7939ae319
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/show.html.erb
@@ -0,0 +1,3 @@
+<%= render 'vehicle_journeys/show_details', vehicle_journey: @vehicle_journey_frequency %>
+<%= render 'show_journey_frequencies' %>
+<%= render 'show_sidebar' %>
diff --git a/app/views/vehicle_journeys/_form.html.erb b/app/views/vehicle_journeys/_form.html.erb
index 3c175148f..71f653b5c 100644
--- a/app/views/vehicle_journeys/_form.html.erb
+++ b/app/views/vehicle_journeys/_form.html.erb
@@ -1,4 +1,5 @@
-<%= semantic_form_for [@referential, @line, @route, @vehicle_journey] do |form| %>
+<%= semantic_form_for vehicle_journey, url: form_url do |form| %>
+ <%= render 'shared/form_messages', { errors: vehicle_journey.errors } %>
<%= form.inputs do %>
<%= form.input :journey_pattern, :as => :select, :collection => @route.journey_patterns, :member_label => Proc.new { |jp| journey_name(jp) } %>
<%= form.input :number %>
@@ -6,64 +7,23 @@
<%= form.input :published_journey_identifier %>
<%= form.input :comment %>
<%= form.input :transport_mode_name, :as => :select, :collection => Chouette::Line.transport_modes, :include_blank => true, :member_label => Proc.new { |mode| t("transport_modes.label.#{mode}") } %>
- <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[@vehicle_journey.human_attribute_name("accessible"), true], [@vehicle_journey.human_attribute_name("not_accessible"), false]], :include_blank => true %>
- <%= form.input :flexible_service, :as => :select, :collection => [[@vehicle_journey.human_attribute_name("on_demaond_fs"), true], [@vehicle_journey.human_attribute_name("regular_fs"), false]], :include_blank => true %>
+ <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[vehicle_journey.human_attribute_name("accessible"), true], [vehicle_journey.human_attribute_name("not_accessible"), false]], :include_blank => true %>
+ <%= form.input :flexible_service, :as => :select, :collection => [[vehicle_journey.human_attribute_name("on_demand_fs"), true], [vehicle_journey.human_attribute_name("regular_fs"), false]], :include_blank => true %>
<%= form.input :status_value %>
<%= form.input :facility %>
<%= form.input :vehicle_type_identifier%>
- <%= form.input :objectid, :required => !@vehicle_journey.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.vehicle_journey.objectid")} %>
- <%= form.input :time_table_tokens, :label => t('.time_tables'), :as => :search_time_table, :json => referential_autocomplete_time_tables_path(@referential, :format => :json), :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :input_html => { :"data-pre" => Rabl::Renderer.new( 'autocomplete_time_tables/index', @vehicle_journey.time_tables, :view_path => 'app/views', :format => :json, :scope => :self ).render } %>
+ <%= form.input :objectid, :required => !vehicle_journey.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.vehicle_journey.objectid")} %>
+ <%= form.input :time_table_tokens, :label => t('.time_tables'), :as => :search_time_table, :json => referential_autocomplete_time_tables_path(@referential, :format => :json), :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :input_html => { :"data-pre" => Rabl::Renderer.new( 'autocomplete_time_tables/index', vehicle_journey.time_tables, :view_path => 'app/views', :format => :json, :scope => :self ).render } %>
<%= form.input :footnote_ids, :as => :check_boxes, :collection => @line.footnotes.map { |f| [ "#{f.code}: #{f.label}", f.id.to_s]} %>
- <li class="input">
- <%= form.label @vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids), :class => "label" %>
- </li>
- <% unless @vehicle_journey.vehicle_journey_at_stops.empty? ||
- @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %> <div class="vehicle_journey_at_stops">
- <div class="well">
- <span class="title"><%= t(".slide_title") %></span>
- <div>
- <span><%= t(".set") %></span> <%= select_tag "", options_for_select( [ [t('.slide_departure'), "departure"], [t('.slide_arrival'), "arrival"] ] ), :class => "departure_or_arrival" %> <span><%= t(".to") %></span>
- <%= select_hour(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.hour) %>
- <%= select_minute(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.min) %>
- <a class="slide btn btn-default"><%= t(".slide") %></a>
- </div>
- </div>
- <% end %>
-
- <table class="table table-hover table-striped">
- <thead>
- <tr>
- <th class="hour title"><%= t('.arrival') %></th>
- <th class="stop title" ><%= t('.stop_title') %></th>
- <th class="hour title"><%= t('.departure') %></th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <td class="title"> <a class="to_departures"><%= t('.to_departures') %></a></td>
- <td class="title" ></td>
- <td class="title"><a class="to_arrivals"><%= t('.to_arrivals') %></a></td>
- </tr>
- </tfoot>
- <tbody class="journey_pattern_dependent_list">
- <%= render :partial => "vehicle_journeys/vehicle_journey_at_stop_fields",
- :collection => @vehicle_journey.vehicle_journey_at_stops, :as => :vehicle_journey_at_stop, :locals => { :vehicle_journey_at_stops_size => @vehicle_journey.vehicle_journey_at_stops.size } %>
-
- </tbody>
- </table>
+ <%= render 'form_vehicle_journey_at_stops', vehicle_journey: vehicle_journey, form: form %>
<% end %>
<%= form.actions do %>
- <%= form.action :submit, :as => :button %>
- <%= form.action :cancel, :as => :link %>
+ <%= form.action :submit, as: :button, label: t(".submit_#{vehicle_journey.journey_category}#{'_edit' unless form.object.new_record?}"), button_html: { class: 'btn btn-primary' } %>
+ <%= form.action :cancel, as: :link %>
<% end %>
<% end %>
-<% if @vehicle_journey.new_record? %>
- <%= javascript_include_tag new_referential_line_route_vehicle_journey_path(@referential, @line, @route, :format => :js) %>
-<% else %>
- <%= javascript_include_tag edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey, :format => :js) %>
-<% end %>
-
+<%= render 'form_footer', vehicle_journey: vehicle_journey %>
diff --git a/app/views/vehicle_journeys/_form_footer.html.erb b/app/views/vehicle_journeys/_form_footer.html.erb
new file mode 100644
index 000000000..c4c51b2b3
--- /dev/null
+++ b/app/views/vehicle_journeys/_form_footer.html.erb
@@ -0,0 +1,5 @@
+<% if vehicle_journey.new_record? %>
+ <%= javascript_include_tag new_referential_line_route_vehicle_journey_path(@referential, @line, @route, :format => :js) %>
+<% else %>
+ <%= javascript_include_tag edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, vehicle_journey, :format => :js) %>
+<% end %>
diff --git a/app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..7e9bc1b38
--- /dev/null
+++ b/app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,49 @@
+<li class="input">
+ <%= form.label vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids), :class => "label" %>
+</li>
+<% unless vehicle_journey.vehicle_journey_at_stops.empty? || vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %>
+ <div class="vehicle_journey_at_stops">
+ <div class="well">
+ <span class="title"><%= t('vehicle_journeys.form.slide_title') %></span>
+ <div>
+ <span><%= t('vehicle_journeys.form.set') %></span>
+ <%= select_tag '', options_for_select( [ [t('vehicle_journeys.form.slide_departure'), "departure"], [t('vehicle_journeys.form.slide_arrival'), "arrival"] ] ), :class => "departure_or_arrival" %>
+ <span><%= t('vehicle_journeys.form.to') %></span>
+ <%= select_hour(vehicle_journey.vehicle_journey_at_stops.first.departure_time.hour) %>
+ <%= select_minute(vehicle_journey.vehicle_journey_at_stops.first.departure_time.min) %>
+ <a class="slide btn btn-default"><%= t('vehicle_journeys.form.slide') %></a>
+ </div>
+ </div>
+ </div>
+<% end %>
+
+<table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th class="hour title"><%= t('vehicle_journeys.form.arrival') %></th>
+ <th class="stop title"><%= t('vehicle_journeys.form.stop_title') %></th>
+ <th class="hour title"><%= t('vehicle_journeys.form.departure') %></th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="title">
+ <%= button_tag 'data-ce-action' => 'to_departures', class: 'ce-hide btn btn-primary' do %>
+ <%= t('vehicle_journeys.form.to_departures').html_safe %>
+ <i class="fa fa-angle-double-right"></i>
+ <% end %>
+ <td class="title"></td>
+ <td class="title">
+ <%= button_tag 'data-ce-action' => 'to_arrivals', class: 'ce-hide btn btn-primary' do %>
+ <i class="fa fa-angle-double-left"></i>
+ <%= t('vehicle_journeys.form.to_arrivals').html_safe %>
+ <% end %>
+ </td>
+ </tr>
+ </tfoot>
+ <tbody class="journey_pattern_dependent_list">
+ <%= render :partial => "vehicle_journeys/vehicle_journey_at_stop_fields",
+ :collection => vehicle_journey.vehicle_journey_at_stops, :as => :vehicle_journey_at_stop,
+ :locals => { :vehicle_journey_at_stops_size => vehicle_journey.vehicle_journey_at_stops.size } %>
+ </tbody>
+</table>
diff --git a/app/views/vehicle_journeys/_route_popover.html.erb b/app/views/vehicle_journeys/_route_popover.html.erb
index 1acba5665..7a8ad5730 100644
--- a/app/views/vehicle_journeys/_route_popover.html.erb
+++ b/app/views/vehicle_journeys/_route_popover.html.erb
@@ -1,6 +1,5 @@
<ul>
<% (selected_route.line.routes.limit(10).reject{ |route| route == selected_route}).each do |route| %>
- <li><%= link_to route.name.truncate(30), [@referential, route.line, route, 'vehicle_journeys'] %></li>
+ <li><%= link_to (route.name ? route.name.truncate(30) : '-' ), [@referential, route.line, route, controller_name] %></li>
<% end %>
</ul>
-</p>
diff --git a/app/views/vehicle_journeys/_show_details.html.erb b/app/views/vehicle_journeys/_show_details.html.erb
new file mode 100644
index 000000000..fccf3d210
--- /dev/null
+++ b/app/views/vehicle_journeys/_show_details.html.erb
@@ -0,0 +1,87 @@
+<%= 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('vehicle_journeys.show.translation_form') %></h4>
+ <div id="translate_form"></div>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="vehicle_journey">
+ <div class="summary">
+ <p>
+ <label><%= vehicle_journey.human_attribute_name(:journey_pattern) %>: </label>
+ <%= link_to journey_name(vehicle_journey.journey_pattern), [@referential, @line, @route, vehicle_journey.journey_pattern] %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("number") %>: </label>
+ <%= vehicle_journey.number %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("published_journey_name") %>: </label>
+ <%= vehicle_journey.published_journey_name %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("published_journey_identifier") %>: </label>
+ <%= vehicle_journey.published_journey_identifier %>
+ </p>
+
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("mobility_restricted_suitability") %>: </label>
+ <% if vehicle_journey.mobility_restricted_suitability.nil? %>
+ <%= vehicle_journey.human_attribute_name("unspecified_mrs") %>
+ <% elsif vehicle_journey.mobility_restricted_suitability? %>
+ <%= vehicle_journey.human_attribute_name("accessible") %>
+ <% else %>
+ <%= vehicle_journey.human_attribute_name("not_accessible") %>
+ <% end %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("flexible_service") %>: </label>
+ <% if vehicle_journey.flexible_service.nil? %>
+ <%= vehicle_journey.human_attribute_name("unspecified_fs") %>
+ <% elsif vehicle_journey.flexible_service? %>
+ <%= vehicle_journey.human_attribute_name("on_demand_fs") %>
+ <% else %>
+ <%= vehicle_journey.human_attribute_name("regular_fs") %>
+ <% end %>
+ </p>
+
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("comment") %>: </label>
+ <%= vehicle_journey.comment %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("status_value") %>: </label>
+ <%= vehicle_journey.status_value %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("facility") %>: </label>
+ <%= vehicle_journey.facility %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("vehicle_type_identifier") %>: </label>
+ <%= vehicle_journey.vehicle_type_identifier %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("footnote_ids") %>: </label>
+ <ul>
+ <% vehicle_journey.footnotes.each do |footnote| %>
+ <li><%= footnote.code %> : <%= footnote.label %></li>
+ <% end %>
+ </ul>
+ </p>
+ </div>
+</div>
+<h3><%= vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids) %></h3>
+<%= render 'show_vehicle_journey_at_stops' %>
+
+<h3><%= t('vehicle_journeys.show.time_tables') %></h3>
+<div class="time_tables paginated_content">
+ <%= paginated_content vehicle_journey.time_tables, "time_tables/time_table", :delete => false %>
+</div>
diff --git a/app/views/vehicle_journeys/_show_sidebar.html.erb b/app/views/vehicle_journeys/_show_sidebar.html.erb
new file mode 100644
index 000000000..5ab7d449a
--- /dev/null
+++ b/app/views/vehicle_journeys/_show_sidebar.html.erb
@@ -0,0 +1,15 @@
+<% content_for :sidebar do %>
+ <ul class="actions">
+ <li><%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %></li>
+ <li><%= link_to t('vehicle_journeys.actions.new_frequency'), new_referential_line_route_vehicle_journey_frequency_path(@referential, @line, @route), :class => "add" %></li>
+ <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>
+ <% unless @vehicle_journey.vehicle_journey_at_stops.empty? %>
+ <li>
+ <i class="fa fa-cubes fa-fw" style="color:#D98F3B;"></i>
+ <%= link_to t('vehicle_journeys.show.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', :class => "with_fa" } %>
+ </li>
+ <% end %>
+ </ul>
+ <%= creation_tag(@vehicle_journey) %>
+<% end %>
diff --git a/app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..cb4a95263
--- /dev/null
+++ b/app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,20 @@
+<div class="vehicle_journey_at_stops content">
+ <table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th class="hour title"><%= t('vehicle_journeys.show.arrival') %></th>
+ <th class="stop title" ><%= t('vehicle_journeys.show.stop_title') %></th>
+ <th class="hour title"><%= t('vehicle_journeys.show.departure') %></th>
+ </tr>
+ <thead>
+ <tbody>
+ <% @vehicle_journey.vehicle_journey_at_stops.each_with_index do |vjas, index| %>
+ <tr class="<%= index%2==0 ? "odd" : "even" %>">
+ <td class="hour <%= vjas.arrival_time.nil? ? "missing" : "" %>"><%= vjas.arrival_time ? l( vjas.arrival_time, :format => :hour) : "" %></td>
+ <td><%= link_to vjas.stop_point.stop_area.name, [@referential, vjas.stop_point.stop_area] %></td>
+ <td class="hour <%= vjas.departure_time.nil? ? "missing" : "" %>"><%= vjas.departure_time ? l( vjas.departure_time, :format => :hour) : "" %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
diff --git a/app/views/vehicle_journeys/_sidebar.html.erb b/app/views/vehicle_journeys/_sidebar.html.erb
index 8d6f310d3..11260cd7b 100644
--- a/app/views/vehicle_journeys/_sidebar.html.erb
+++ b/app/views/vehicle_journeys/_sidebar.html.erb
@@ -1,6 +1,7 @@
- <ul class="actions">
- <li><%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %></li>
- <li><%= link_to t('vehicle_journey_imports.new.title'), new_referential_line_route_vehicle_journey_import_path( @referential, @line, @route ), :class => "import" %></li>
- <li><%= link_to t('vehicle_journey_exports.new.title'), referential_line_route_vehicle_journey_exports_path(@referential, @line, @route, :format => :zip), :class => "export" %></li>
- </ul>
+<ul class="actions">
+ <li><%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %></li>
+ <li><%= link_to t('vehicle_journeys.actions.new_frequency'), new_referential_line_route_vehicle_journey_frequency_path(@referential, @line, @route), :class => "add" %></li>
+ <li><%= link_to t('vehicle_journey_imports.new.title'), new_referential_line_route_vehicle_journey_import_path( @referential, @line, @route ), :class => "import" %></li>
+ <li><%= link_to t('vehicle_journey_exports.new.title'), referential_line_route_vehicle_journey_exports_path(@referential, @line, @route, :format => :zip), :class => "export" %></li>
+</ul>
diff --git a/app/views/vehicle_journeys/_vehicle_journeys.html.erb b/app/views/vehicle_journeys/_vehicle_journeys.html.erb
index ecdb12c6e..71a28ec6e 100644
--- a/app/views/vehicle_journeys/_vehicle_journeys.html.erb
+++ b/app/views/vehicle_journeys/_vehicle_journeys.html.erb
@@ -1,39 +1,22 @@
<div class="page_info">
- <span class="search"> <%= t("will_paginate.page_entries_info.search") %></span> <%= page_entries_info @vehicle_journeys %>
+ <span class="search"><%= t("will_paginate.page_entries_info.search") %></span>
+ <%= page_entries_info @vehicle_journeys %>
+ <span class="pull-right">
+ <% if controller_name == 'vehicle_journey_frequencies' && exist_vehicle_journeys?(@route) %>
+ <i class="fa fa-clock-o"></i>
+ <%= link_to t("vehicle_journeys.actions.show"), referential_line_route_vehicle_journeys_path(@referential, @line, @route) %>
+ <% elsif exist_vehicle_journey_frequencies?(@route) %>
+ <i class="fa fa-clock-o"></i>
+ <%= link_to t("vehicle_journey_frequencies.actions.show"), referential_line_route_vehicle_journey_frequencies_path(@referential, @line, @route) %>
+ <% end %>
+ </span>
</div>
<div class="pagination">
<%= will_paginate @vehicle_journeys, :container => false, renderer: RemoteBootstrapPaginationLinkRenderer %>
</div>
<div class="vehicle_journeys paginated_content">
- <table class="table table-hover table-striped">
- <thead>
- <tr>
- <th class="title">
- <button data-style="primary" data-container="body" rel="popover" data-toggle="popover" title='<%= t(".line_routes") %>' data-placement="top" data-content='<%= render( partial: "route_popover", :locals => { :selected_route => @route }) %>' class="route_popover btn btn-default btn-sm"><i class='fa fa-search'></i><%= Chouette::Route.model_name.human.capitalize %></button>
- </th>
- <% @vehicle_journeys.each do |vj| %>
- <th class="vehicle_journey">
- <button data-style="primary" data-container="body" rel="popover" data-toggle="popover" data-title='<%= link_to(vehicle_title(vj), [@referential, @line, @route, vj] ) %> <%= link_to('<span class="fa fa-pencil"></span>'.html_safe, ["edit", @referential, @line, @route, vj], :class => "btn btn-default btn-sm" ) %>' data-placement= "top" data-content='<%= render( partial: "show_popover", :locals => { :vehicle_journey => vj }) %>' class="vehicle_journey_popover btn btn-default btn-sm"><i class='fa fa-search'></i></button>
- </th>
- <% end %>
- </tr>
- </thead>
- <tbody>
- <% @route.stop_points.each_with_index do |sp, index| %>
- <tr class="<%= cycle('odd', 'even') %>">
- <td class="stop_area"><%= sp.stop_area.name %></td>
- <% @vehicle_journeys.each do |vj| %>
- <td class="hours <%= missing_time_check(@matrix["#{vj.id}-#{sp.id}"]) %>">
- <%= (@matrix["#{vj.id}-#{sp.id}"] && @matrix["#{vj.id}-#{sp.id}"].departure_time) ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "--" %>
- </td>
- <% end %>
- </tr>
- <% end %>
- </tbody>
- </table>
+ <%= render 'vehicle_journeys_matrix' %>
</div>
<div class="pagination">
<%= will_paginate @vehicle_journeys, :container => false, renderer: RemoteBootstrapPaginationLinkRenderer %>
</div>
-
-
diff --git a/app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb b/app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb
new file mode 100644
index 000000000..3254430cd
--- /dev/null
+++ b/app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb
@@ -0,0 +1,40 @@
+<table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th class="title">
+ <button data-style="primary" data-container="body" rel="popover" data-toggle="popover" title='<%= t(".line_routes") %>'
+ data-placement="top" data-content='<%= render( partial: "route_popover", :locals => { :selected_route => @route }) %>'
+ class="route_popover btn btn-default btn-sm">
+ <i class='fa fa-search'></i>
+ <%= Chouette::Route.model_name.human.capitalize %>
+ </button>
+ </th>
+ <% @vehicle_journeys.each do |vj| %>
+ <th class="vehicle_journey">
+ <button data-style="primary" data-container="body" rel="popover" data-toggle="popover"
+ data-title='<%= link_to(vehicle_title(vj), [@referential, @line, @route, vj] ) %>
+ <%= link_to('<span class="fa fa-pencil"></span>'.html_safe,
+ send("edit_referential_line_route_vehicle_journey#{'_frequency' if vj.frequency?}_path", @referential, @line, @route, vj),
+ :class => "btn btn-default btn-sm" ) %>'
+ data-placement= "top"
+ data-content='<%= render( partial: "show_popover", :locals => { :vehicle_journey => vj }) %>'
+ class="vehicle_journey_popover btn btn-default btn-sm">
+ <i class='fa fa-search'></i>
+ </button>
+ </th>
+ <% end %>
+ </tr>
+ </thead>
+ <tbody>
+ <% @route.stop_points.each_with_index do |sp, index| %>
+ <tr class="<%= cycle('odd', 'even') %>">
+ <td class="stop_area"><%= sp.stop_area.name %></td>
+ <% @vehicle_journeys.each do |vj| %>
+ <td class="hours <%= missing_time_check(@matrix["#{vj.id}-#{sp.id}"]) %><%= ' ce-VehicleJourneyBlock-frequency' if vj.frequency? %>">
+ <%= (@matrix["#{vj.id}-#{sp.id}"] && @matrix["#{vj.id}-#{sp.id}"].departure_time) ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "--" %>
+ </td>
+ <% end %>
+ </tr>
+ <% end %>
+ </tbody>
+</table>
diff --git a/app/views/vehicle_journeys/edit.html.erb b/app/views/vehicle_journeys/edit.html.erb
index 51653a34a..0d3a2db96 100644
--- a/app/views/vehicle_journeys/edit.html.erb
+++ b/app/views/vehicle_journeys/edit.html.erb
@@ -1,4 +1,5 @@
<%= title_tag edit_vehicle_title(@vehicle_journey) %>
-<%= render "form" %>
+<%= render 'form', vehicle_journey: @vehicle_journey, form_url: referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey) %>
+
diff --git a/app/views/vehicle_journeys/index.html.erb b/app/views/vehicle_journeys/index.html.erb
index 13126b2e1..3fd123c79 100644
--- a/app/views/vehicle_journeys/index.html.erb
+++ b/app/views/vehicle_journeys/index.html.erb
@@ -14,30 +14,31 @@
<div id="advanced_search" class="panel-collapse collapse">
<div class="panel-body">
<div>
- <%= f.label :time_tables_id_not_eq, "Sans calendrier" %>
- <%= f.check_box :time_tables_id_not_eq %>
+ <%= f.label :time_tables_id_not_eq, "Sans calendrier" %>
+ <%= f.check_box :time_tables_id_not_eq %>
- <span class="time_tables_id_eq">
- <%= f.label :time_tables_id_eq, "Sélectionner calendriers" %>
- <%= f.text_field :time_tables_id_eq, :input_html => { :"data-pre" => [].to_json} %>
- </span>
+ <span class="time_tables_id_eq">
+ <%= f.label :time_tables_id_eq, "Sélectionner calendriers" %>
+ <%= f.text_field :time_tables_id_eq, :input_html => { :"data-pre" => [].to_json} %>
+ </span>
</div>
+ <% if controller_name != 'vehicle_journey_frequencies' %>
+ <div>
+ <%= f.label :vehicle_journey_at_stops_departure_time_not_eq, "Sans horaire" %>
+ <%= f.check_box :vehicle_journey_at_stops_departure_time_not_eq %>
- <div>
- <%= f.label :vehicle_journey_at_stops_departure_time_not_eq, "Sans horaire" %>
- <%= f.check_box :vehicle_journey_at_stops_departure_time_not_eq %>
-
- <span class="vehicle_journey_at_stops_departure_time_gt">
- <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(3i)]" %> type="hidden" value="1">
- <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(2i)]" %> type="hidden" value="1">
- <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(1i)]" %> type="hidden" value="2000">
- <%= f.label :vehicle_journey_at_stops_departure_time_gt, t('.time_range') %>
- <%= select_hour(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").hour : 0,
- :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(4i)") %>
- <%= select_minute(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").min : 0,
- :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(5i)") %>
- </span>
- </div>
+ <span class="vehicle_journey_at_stops_departure_time_gt">
+ <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(3i)]" %> type="hidden" value="1">
+ <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(2i)]" %> type="hidden" value="1">
+ <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(1i)]" %> type="hidden" value="2000">
+ <%= f.label :vehicle_journey_at_stops_departure_time_gt, t('.time_range') %>
+ <%= select_hour(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").hour : 0,
+ :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(4i)") %>
+ <%= select_minute(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").min : 0,
+ :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(5i)") %>
+ </span>
+ </div>
+ <% end %>
</div>
</div>
</div>
diff --git a/app/views/vehicle_journeys/new.html.erb b/app/views/vehicle_journeys/new.html.erb
index a32e9cc31..d2e9d7c4c 100644
--- a/app/views/vehicle_journeys/new.html.erb
+++ b/app/views/vehicle_journeys/new.html.erb
@@ -1,4 +1,4 @@
<%= title_tag t('vehicle_journeys.new.title') %>
-<%= render "form" %>
+<%= render 'form', { vehicle_journey: @vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(@referential, @line, @route, @vehicle_journey) } %>
diff --git a/app/views/vehicle_journeys/new.js.erb b/app/views/vehicle_journeys/new.js.erb
index 65e5dfccb..160e7a34b 100644
--- a/app/views/vehicle_journeys/new.js.erb
+++ b/app/views/vehicle_journeys/new.js.erb
@@ -1,10 +1,13 @@
$(document).ready(function() {
$("#vehicle_journey_journey_pattern_id").change(
function(){
- var url = "<%= referential_line_route_journey_patterns_path(@referential.id,@line.id,@route.id) %>";
- url = url + "/" + $("#vehicle_journey_journey_pattern_input select option:selected").attr("value") +
- "/new_vehicle_journey";
- $.get(url);
+ var vehicle_journey_journey_pattern_id = $("#vehicle_journey_journey_pattern_input select option:selected").attr("value");
+ if (vehicle_journey_journey_pattern_id > 0) {
+ var url = "<%= referential_line_route_journey_patterns_path(@referential.id,@line.id,@route.id) %>";
+ url = url + "/" + vehicle_journey_journey_pattern_id +
+ "/new_vehicle_journey";
+ $.get(url);
+ }
}
)
});
diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb
index 1e7c99a37..4bf814bbe 100644
--- a/app/views/vehicle_journeys/show.html.erb
+++ b/app/views/vehicle_journeys/show.html.erb
@@ -1,119 +1,2 @@
-<%= 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>
- <div id="translate_form"></div>
- </div>
- </div>
- </div>
-</div>
-
-<div class="vehicle_journey">
- <div class="summary">
- <p>
- <label><%= @vehicle_journey.human_attribute_name(:journey_pattern) %>: </label>
- <%= link_to journey_name(@vehicle_journey.journey_pattern), [@referential, @line, @route, @vehicle_journey.journey_pattern] %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("number") %>: </label>
- <%= @vehicle_journey.number %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("published_journey_name") %>: </label>
- <%= @vehicle_journey.published_journey_name %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("published_journey_identifier") %>: </label>
- <%= @vehicle_journey.published_journey_identifier %>
- </p>
-
- <p>
- <label><%= @vehicle_journey.human_attribute_name("mobility_restricted_suitability") %>: </label>
- <% if @vehicle_journey.mobility_restricted_suitability.nil? %>
- <%= @vehicle_journey.human_attribute_name("unspecified_mrs") %>
- <% elsif @vehicle_journey.mobility_restricted_suitability? %>
- <%= @vehicle_journey.human_attribute_name("accessible") %>
- <% else %>
- <%= @vehicle_journey.human_attribute_name("not_accessible") %>
- <% end %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("flexible_service") %>: </label>
- <% if @vehicle_journey.flexible_service.nil? %>
- <%= @vehicle_journey.human_attribute_name("unspecified_fs") %>
- <% elsif @vehicle_journey.flexible_service? %>
- <%= @vehicle_journey.human_attribute_name("on_demaond_fs") %>
- <% else %>
- <%= @vehicle_journey.human_attribute_name("regular_fs") %>
- <% end %>
- </p>
-
- <p>
- <label><%= @vehicle_journey.human_attribute_name("comment") %>: </label>
- <%= @vehicle_journey.comment %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("status_value") %>: </label>
- <%= @vehicle_journey.status_value %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("facility") %>: </label>
- <%= @vehicle_journey.facility %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("vehicle_type_identifier") %>: </label>
- <%= @vehicle_journey.vehicle_type_identifier %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("footnote_ids") %>: </label>
- <ul>
- <% @vehicle_journey.footnotes.each do |footnote| %>
- <li><%= footnote.code %> : <%= footnote.label %></li>
- <% end %>
- </ul>
- </p>
- </div>
-</div>
-<h3><%= @vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids) %></h3>
-<div class="vehicle_journey_at_stops content">
- <table class="table table-hover table-striped">
- <thead>
- <tr>
- <th class="hour title"><%= t('.arrival') %></th>
- <th class="stop title" ><%= t('.stop_title') %></th>
- <th class="hour title"><%= t('.departure') %></th>
- </tr>
- <thead>
- <tbody>
- <% @vehicle_journey.vehicle_journey_at_stops.each_with_index do |vjas, index| %>
- <tr class="<%= index%2==0 ? "odd" : "even" %>">
- <td class="hour <%= vjas.arrival_time.nil? ? "missing" : "" %>"><%= vjas.arrival_time ? l( vjas.arrival_time, :format => :hour) : "" %></td>
- <td><%= link_to vjas.stop_point.stop_area.name, [@referential, vjas.stop_point.stop_area] %></td>
- <td class="hour <%= vjas.departure_time.nil? ? "missing" : "" %>"><%= vjas.departure_time ? l( vjas.departure_time, :format => :hour) : "" %></td>
- </tr>
- <% end %>
- </tbody>
- </table>
-</div>
-
-<h3><%= t('.time_tables') %></h3>
-<div class="time_tables paginated_content">
- <%= paginated_content @vehicle_journey.time_tables, "time_tables/time_table", :delete => false %>
-</div>
-
-
-<% content_for :sidebar do %>
- <ul class="actions">
- <li><%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %></li>
- <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>
- <% unless @vehicle_journey.vehicle_journey_at_stops.empty? %>
- <li><font color="#D98F3B"><i class="fa fa-cubes fa-fw"></i></font><%= 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', :class => "with_fa" } %></li>
- <% end %>
- </ul>
- <%= creation_tag(@vehicle_journey) %>
-<% end %>
+<%= render 'show_details', vehicle_journey: @vehicle_journey %>
+<%= render 'show_sidebar' %>
diff --git a/config/database.yml b/config/database.yml
index 08d265760..81951d183 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -1,12 +1,12 @@
default: &default
- adapter: postgresql
+ adapter: postgis
encoding: unicode
- pool: 5
port: 5432
host: localhost
- schema_search_path: "public"
+ schema_search_path: 'public,shared_extensions'
username: chouette
password: chouette
+ postgis_schema: 'shared_extensions'
development:
<<: *default
diff --git a/config/database.yml.travis b/config/database.yml.travis
index c554142f5..dc35cfcb2 100644
--- a/config/database.yml.travis
+++ b/config/database.yml.travis
@@ -1,11 +1,11 @@
default: &default
- adapter: postgresql
+ adapter: postgis
encoding: unicode
- pool: 5
port: 5432
host: localhost
- schema_search_path: "public"
+ schema_search_path: 'public,shared_extensions'
username: postgres
+ postgis_schema: 'shared_extensions'
development:
<<: *default
diff --git a/config/deploy/private.rb b/config/deploy/private.rb
index 0a9cb5e0c..44823408f 100644
--- a/config/deploy/private.rb
+++ b/config/deploy/private.rb
@@ -1,3 +1,3 @@
server "chouette-private.marseille.cityway.fr", :app, :web, :db, :primary => true
-set :branch, "V2_5"
+set :branch, "V3_1"
set :gui_cmd, "2.5.2"
diff --git a/config/deploy/production.rb b/config/deploy/production.rb
index c24f29894..269e4347a 100644
--- a/config/deploy/production.rb
+++ b/config/deploy/production.rb
@@ -1,3 +1,3 @@
server "chouette.marseille.cityway.fr", :app, :web, :db, :primary => true
-set :branch, "V2_5"
-set :gui_cmd, "2.5.1"
+set :branch, "V3_1"
+set :gui_cmd, "3.1.0"
diff --git a/config/deploy/staging.rb b/config/deploy/staging.rb
index e8f79cac6..983e4ec68 100644
--- a/config/deploy/staging.rb
+++ b/config/deploy/staging.rb
@@ -3,5 +3,5 @@ set :deploy_via, :copy
set :copy_cache, true
set :copy_via, :scp
set :copy_exclude, ".git/*"
-set :branch, "V2_5"
-set :gui_cmd, "2.5.1" \ No newline at end of file
+set :branch, "V3_1"
+set :gui_cmd, "3.0.0"
diff --git a/config/deploy/unstable.rb b/config/deploy/unstable.rb
index aff60778c..d363a6fa4 100644
--- a/config/deploy/unstable.rb
+++ b/config/deploy/unstable.rb
@@ -1,3 +1,3 @@
server "chouette-p.aix.cityway.fr", :app, :web, :db, :primary => true
-set :branch, "V3_0"
+set :branch, "master"
#set :gui_cmd, "2.5.2"
diff --git a/config/environment.rb b/config/environment.rb
index ebc5d5098..dbb8bc8b6 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -5,4 +5,4 @@ require File.expand_path('../application', __FILE__)
Rails.application.initialize!
# Fix version
-APP_VERSION = '3.0.0'
+APP_VERSION = '3.2.0'
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 892be33da..c04e4743e 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -26,10 +26,10 @@ Rails.application.configure do
config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
- config.assets.compile = false
+ config.assets.compile = true
# Generate digests for assets URLs.
- config.assets.digest = false
+ config.assets.digest = true
# Must add sub uri for assets. Same as config.action_controller.relative_url_root
# config.assets.prefix = "/chouette2"
@@ -115,7 +115,7 @@ Rails.application.configure do
# config.demo_data = "/path/to/demo.zip"
# link to validation specification pages
- config.validation_spec = "http://www.chouette.mobi/neptune-validation/v21/"
+ config.validation_spec = "http://www.chouette.mobi/neptune-validation/v22/"
# paths for external resources
config.to_prepare do
diff --git a/config/initializers/apartment.rb b/config/initializers/apartment.rb
index b87a9fd67..31649f3e2 100644
--- a/config/initializers/apartment.rb
+++ b/config/initializers/apartment.rb
@@ -26,7 +26,7 @@ Apartment.configure do |config|
#config.use_sql = true
# configure persistent schemas (E.g. hstore )
- # config.persistent_schemas = %w{ hstore }
+ config.persistent_schemas = %w{ shared_extensions }
# add the Rails environment to database names?
# config.prepend_environment = true
diff --git a/config/initializers/rgeo.rb b/config/initializers/rgeo.rb
new file mode 100644
index 000000000..787afae3a
--- /dev/null
+++ b/config/initializers/rgeo.rb
@@ -0,0 +1 @@
+RGeo::Geos.preferred_native_interface = :ffi
diff --git a/config/initializers/route_section.rb b/config/initializers/route_section.rb
new file mode 100644
index 000000000..dadea36ee
--- /dev/null
+++ b/config/initializers/route_section.rb
@@ -0,0 +1,3 @@
+Rails.application.config.to_prepare do
+ Chouette::RouteSection.processor = OsrmRouteSectionProcessor.new
+end
diff --git a/config/locales/access_links.en.yml b/config/locales/access_links.en.yml
new file mode 100644
index 000000000..048261fc1
--- /dev/null
+++ b/config/locales/access_links.en.yml
@@ -0,0 +1,45 @@
+en:
+ access_links:
+ actions:
+ new: "Add a new access link"
+ edit: "Edit this access link"
+ destroy: "Remove this access link"
+ destroy_confirm: "Are you sure you want destroy this access link?"
+ new:
+ title_access_point_to_stop_area: "Create an access link from access %{access_point} to stop area %{stop_area}"
+ title_stop_area_to_access_point: "Create an access link from stop area %{stop_area} to access %{access_point}"
+ edit:
+ title_access_point_to_stop_area: "Update an access link from access %{access_point} to stop area %{stop_area}"
+ title_stop_area_to_access_point: "Update an access link from stop area %{stop_area} to access %{access_point} "
+ show:
+ title: "access link %{access_link}"
+ durations: "Durations (hh mm ss):"
+ activerecord:
+ models:
+ access_link:
+ zero: "access link"
+ one: "access link"
+ other: "access links"
+ attributes:
+ access_link:
+ access_point: "Access Point"
+ stop_area: "Stop Area"
+ name: "Name"
+ comment: "Comment"
+ link_distance: "Distance (m)"
+ access_link_type: "Type"
+ default_duration: "Average"
+ frequent_traveller_duration: "Regular passenger"
+ occasional_traveller_duration: "Occasional passenger"
+ mobility_restricted_traveller_duration: "Mobility reduced passenger"
+ mobility_restricted_suitability: "Mobility reduced passenger suitable"
+ stairs_availability: "Escalator"
+ lift_availability: "Lift"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creatorid: "Created by "
+ formtastic:
+ titles:
+ access_link:
+ objectid: "[prefix]:AccessLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
diff --git a/config/locales/access_links.fr.yml b/config/locales/access_links.fr.yml
new file mode 100644
index 000000000..efeb8b6f9
--- /dev/null
+++ b/config/locales/access_links.fr.yml
@@ -0,0 +1,45 @@
+fr:
+ access_links:
+ actions:
+ new: "Ajouter un lien"
+ edit: "Modifier ce lien"
+ destroy: "Supprimer ce lien"
+ destroy_confirm: "Etes vous sûr de supprimer ce lien ?"
+ new:
+ title_access_point_to_stop_area: "Créer un lien depuis l'accès %{access_point} vers l'arrêt %{stop_area}"
+ title_stop_area_to_access_point: "Créer un lien depuis l'arrêt %{stop_area} vers l'accès %{access_point}"
+ edit:
+ title_access_point_to_stop_area: "Modifier un lien depuis l'accès %{access_point} vers l'arrêt %{stop_area}"
+ title_stop_area_to_access_point: "Modifier un lien depuis l'arrêt %{stop_area} vers l'accès %{access_point}"
+ show:
+ title: "lien d'accès %{access_link}"
+ durations: "Durées (hh mm ss) :"
+ activerecord:
+ models:
+ access_link:
+ zero: "lien d'accès"
+ one: "lien d'accès"
+ other: "liens d'accès"
+ attributes:
+ access_link:
+ access_point: "Accès"
+ stop_area: "Arrêt"
+ name: "Nom"
+ comment: "Commentaire"
+ link_distance: "Distance (m)"
+ access_link_type: "Type"
+ default_duration: "moyenne"
+ frequent_traveller_duration: "pour un habitué"
+ occasional_traveller_duration: "pour un voyageur occasionnel"
+ mobility_restricted_traveller_duration: "pour un voyageur à mobilité réduite"
+ mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite"
+ stairs_availability: "Escalator"
+ lift_availability: "Ascenseur"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ formtastic:
+ titles:
+ access_link:
+ objectid: "[prefixe]:AccessLink:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
diff --git a/config/locales/access_links.yml b/config/locales/access_links.yml
deleted file mode 100644
index 1f72e5285..000000000
--- a/config/locales/access_links.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-en:
- access_links:
- actions:
- new: "Add a new access link"
- edit: "Edit this access link"
- destroy: "Remove this access link"
- destroy_confirm: "Are you sure you want destroy this access link?"
- new:
- title_access_point_to_stop_area: "Create an access link from access %{access_point} to stop area %{stop_area}"
- title_stop_area_to_access_point: "Create an access link from stop area %{stop_area} to access %{access_point}"
- edit:
- title_access_point_to_stop_area: "Update an access link from access %{access_point} to stop area %{stop_area}"
- title_stop_area_to_access_point: "Update an access link from stop area %{stop_area} to access %{access_point} "
- show:
- title: "access link %{access_link}"
- durations: "Durations (hh mm ss):"
- activerecord:
- models:
- access_link:
- zero: "access link"
- one: "access link"
- other: "access links"
- attributes:
- access_link:
- access_point: "Access Point"
- stop_area: "Stop Area"
- name: "Name"
- comment: "Comment"
- link_distance: "Distance (m)"
- access_link_type: "Type"
- default_duration: "Average"
- frequent_traveller_duration: "Regular passenger"
- occasional_traveller_duration: "Occasional passenger"
- mobility_restricted_traveller_duration: "Mobility reduced passenger"
- mobility_restricted_suitability: "Mobility reduced passenger suitable"
- stairs_availability: "Escalator"
- lift_availability: "Lift"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creatorid: "Created by "
- formtastic:
- titles:
- access_link:
- objectid: "[prefix]:AccessLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
-
-fr:
- access_links:
- actions:
- new: "Ajouter un lien"
- edit: "Modifier ce lien"
- destroy: "Supprimer ce lien"
- destroy_confirm: "Etes vous sûr de supprimer ce lien ?"
- new:
- title_access_point_to_stop_area: "Créer un lien depuis l'accès %{access_point} vers l'arrêt %{stop_area}"
- title_stop_area_to_access_point: "Créer un lien depuis l'arrêt %{stop_area} vers l'accès %{access_point}"
- edit:
- title_access_point_to_stop_area: "Modifier un lien depuis l'accès %{access_point} vers l'arrêt %{stop_area}"
- title_stop_area_to_access_point: "Modifier un lien depuis l'arrêt %{stop_area} vers l'accès %{access_point}"
- show:
- title: "lien d'accès %{access_link}"
- durations: "Durées (hh mm ss) :"
- activerecord:
- models:
- access_link:
- zero: "lien d'accès"
- one: "lien d'accès"
- other: "liens d'accès"
- attributes:
- access_link:
- access_point: "Accès"
- stop_area: "Arrêt"
- name: "Nom"
- comment: "Commentaire"
- link_distance: "Distance (m)"
- access_link_type: "Type"
- default_duration: "moyenne"
- frequent_traveller_duration: "pour un habitué"
- occasional_traveller_duration: "pour un voyageur occasionnel"
- mobility_restricted_traveller_duration: "pour un voyageur à mobilité réduite"
- mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite"
- stairs_availability: "Escalator"
- lift_availability: "Ascenseur"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- formtastic:
- titles:
- access_link:
- objectid: "[prefixe]:AccessLink:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
-
-
diff --git a/config/locales/access_points.en.yml b/config/locales/access_points.en.yml
new file mode 100644
index 000000000..f304c7621
--- /dev/null
+++ b/config/locales/access_points.en.yml
@@ -0,0 +1,63 @@
+en:
+ access_points:
+ access_point:
+ no_position: "No Position"
+ actions:
+ new: "Add a new access point"
+ edit: "Edit this access point"
+ destroy: "Remove this access point"
+ destroy_confirm: "Are you sure you want destroy this access point?"
+ new:
+ title: "Add a new access point"
+ edit:
+ title: "Update access point %{access_point}"
+ show:
+ title: "Access point %{access_point}"
+ geographic_data: "Geographic data "
+ no_geographic_data: "None"
+ generic_access_links: "Glogal access links"
+ detail_access_links: "Specific access links"
+ access_link_legend_1: "grays arrows for undefined links, green for defined ones"
+ access_link_legend_2: "clic on arrows to create/edit a link"
+ index:
+ title: "Access points"
+ name_or_country_code: "Name"
+ activerecord:
+ models:
+ access_point:
+ zero: "access point"
+ one: "access point"
+ other: "access points"
+ attributes:
+ access_point:
+ stop_area: "Contain in Stop Area"
+ name: "Name"
+ comment: "Comments"
+ access_point_type: "Access point type"
+ street_name: "Street name"
+ country_code: "INSEE code"
+ openning_time: "Opening time"
+ closing_time: "Closing time"
+ projection: "Projection type"
+ projection_x: "x-position"
+ projection_y: "y-position"
+ projection_xy: "position (x,y)"
+ long_lat_type: "Projection type"
+ longitude: "Longitude"
+ latitude: "Latitude"
+ mobility_restricted_suitability: "Mobility reduced passenger suitable"
+ stairs_availability: "Escalator"
+ lift_availability: "Lift"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creatorid: "Created by"
+ coordinates: "Coordinates (lat,lng)"
+ zip_code: "Zip code"
+ city_name: "City"
+ formtastic:
+ titles:
+ access_point:
+ objectid: "[prefix]:AccessPoint:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
+ projection_xy: "x,y in secondary referential, dot for decimal separator"
diff --git a/config/locales/access_points.fr.yml b/config/locales/access_points.fr.yml
new file mode 100644
index 000000000..f3a8d5b9d
--- /dev/null
+++ b/config/locales/access_points.fr.yml
@@ -0,0 +1,63 @@
+fr:
+ access_points:
+ access_point:
+ no_position: "Pas de position"
+ actions:
+ new: "Ajouter un accès"
+ edit: "Modifier cet accès"
+ destroy: "Supprimer cet accès"
+ destroy_confirm: "Etes vous sûr de supprimer cet accès ?"
+ new:
+ title: "Ajouter un accès"
+ edit:
+ title: "Modifier l'accès %{access_point}"
+ show:
+ title: "Accès %{access_point}"
+ geographic_data: "Données géographiques"
+ no_geographic_data: "Aucune"
+ generic_access_links: "Liens Arrêts - Accès globaux"
+ detail_access_links: "Liens Arrêts - Accès détaillés"
+ access_link_legend_1: "Les flêches grises représentent des liens non définis"
+ access_link_legend_2: "cliquer sur les flêches pour créer/éditer un lien"
+ index:
+ name_or_country_code: "Nom"
+ title: "Accès de %{stop_area}"
+ activerecord:
+ models:
+ access_point:
+ zero: "accès"
+ one: "accès"
+ other: "accès"
+ attributes:
+ access_point:
+ stop_area: "Zone d'arrêts"
+ name: "Nom"
+ comment: "Commentaire"
+ access_point_type: "Type d'accès"
+ street_name: "Nom de la rue"
+ country_code: "Code INSEE"
+ projection: "Projection"
+ projection_x: "Position X"
+ projection_y: "Position Y"
+ projection_xy: "Position (x,y)"
+ long_lat_type: "Projection"
+ longitude: "Longitude"
+ latitude: "Latitude"
+ openning_time: "Horaire d'ouverture"
+ closing_time: "Horaire de fermeture"
+ mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite"
+ stairs_availability: "Escalator"
+ lift_availability: "Ascenseur"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ coordinates: "Coordonnées (lat,lng)"
+ zip_code: "Code postal"
+ city_name: "Commune"
+ formtastic:
+ titles:
+ access_point:
+ objectid: "[prefixe]:AccessPoint:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
+ projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
diff --git a/config/locales/access_points.yml b/config/locales/access_points.yml
deleted file mode 100644
index d6352253c..000000000
--- a/config/locales/access_points.yml
+++ /dev/null
@@ -1,129 +0,0 @@
-en:
- access_points:
- access_point:
- no_position: "No Position"
- actions:
- new: "Add a new access point"
- edit: "Edit this access point"
- destroy: "Remove this access point"
- destroy_confirm: "Are you sure you want destroy this access point?"
- new:
- title: "Add a new access point"
- edit:
- title: "Update access point %{access_point}"
- show:
- title: "Access point %{access_point}"
- geographic_data: "Geographic data "
- no_geographic_data: "None"
- generic_access_links: "Glogal access links"
- detail_access_links: "Specific access links"
- access_link_legend_1: "grays arrows for undefined links, green for defined ones"
- access_link_legend_2: "clic on arrows to create/edit a link"
- index:
- title: "Access points"
- name_or_country_code: "Name"
- activerecord:
- models:
- access_point:
- zero: "access point"
- one: "access point"
- other: "access points"
- attributes:
- access_point:
- stop_area: "Contain in Stop Area"
- name: "Name"
- comment: "Comments"
- access_point_type: "Access point type"
- street_name: "Street name"
- country_code: "INSEE code"
- openning_time: "Opening time"
- closing_time: "Closing time"
- projection: "Projection type"
- projection_x: "x-position"
- projection_y: "y-position"
- projection_xy: "position (x,y)"
- long_lat_type: "Projection type"
- longitude: "Longitude"
- latitude: "Latitude"
- mobility_restricted_suitability: "Mobility reduced passenger suitable"
- stairs_availability: "Escalator"
- lift_availability: "Lift"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creatorid: "Created by"
- coordinates: "Coordinates (lat,lng)"
- zip_code: "Zip code"
- city_name: "City"
- formtastic:
- titles:
- access_point:
- objectid: "[prefix]:AccessPoint:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
- projection_xy: "x,y in secondary referential, dot for decimal separator"
-
-fr:
- access_points:
- access_point:
- no_position: "Pas de position"
- actions:
- new: "Ajouter un accès"
- edit: "Modifier cet accès"
- destroy: "Supprimer cet accès"
- destroy_confirm: "Etes vous sûr de supprimer cet accès ?"
- new:
- title: "Ajouter un accès"
- edit:
- title: "Modifier l'accès %{access_point}"
- show:
- title: "Accès %{access_point}"
- geographic_data: "Données géographiques"
- no_geographic_data: "Aucune"
- generic_access_links: "Liens Arrêts - Accès globaux"
- detail_access_links: "Liens Arrêts - Accès détaillés"
- access_link_legend_1: "Les flêches grises représentent des liens non définis"
- access_link_legend_2: "cliquer sur les flêches pour créer/éditer un lien"
- index:
- name_or_country_code: "Nom"
- title: "Accès de %{stop_area}"
- activerecord:
- models:
- access_point:
- zero: "accès"
- one: "accès"
- other: "accès"
- attributes:
- access_point:
- stop_area: "Zone d'arrêts"
- name: "Nom"
- comment: "Commentaire"
- access_point_type: "Type d'accès"
- street_name: "Nom de la rue"
- country_code: "Code INSEE"
- projection: "Projection"
- projection_x: "Position X"
- projection_y: "Position Y"
- projection_xy: "Position (x,y)"
- long_lat_type: "Projection"
- longitude: "Longitude"
- latitude: "Latitude"
- openning_time: "Horaire d'ouverture"
- closing_time: "Horaire de fermeture"
- mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite"
- stairs_availability: "Escalator"
- lift_availability: "Ascenseur"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- coordinates: "Coordonnées (lat,lng)"
- zip_code: "Code postal"
- city_name: "Commune"
- formtastic:
- titles:
- access_point:
- objectid: "[prefixe]:AccessPoint:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
- projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
-
-
diff --git a/config/locales/access_types.en.yml b/config/locales/access_types.en.yml
new file mode 100644
index 000000000..79201da40
--- /dev/null
+++ b/config/locales/access_types.en.yml
@@ -0,0 +1,6 @@
+en:
+ access_types:
+ label:
+ in: "Entrance"
+ out: "Exit"
+ in_out: "Both ways"
diff --git a/config/locales/access_types.fr.yml b/config/locales/access_types.fr.yml
new file mode 100644
index 000000000..88c9b275b
--- /dev/null
+++ b/config/locales/access_types.fr.yml
@@ -0,0 +1,6 @@
+fr:
+ access_types:
+ label:
+ in: "Entrée"
+ out: "Sortie"
+ in_out: "Entrée/Sortie"
diff --git a/config/locales/access_types.yml b/config/locales/access_types.yml
deleted file mode 100644
index 60fe17d0f..000000000
--- a/config/locales/access_types.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-en:
- access_types:
- label:
- in: "Entrance"
- out: "Exit"
- in_out: "Both ways"
-
-fr:
- access_types:
- label:
- in: "Entrée"
- out: "Sortie"
- in_out: "Entrée/Sortie"
diff --git a/config/locales/actions.en.yml b/config/locales/actions.en.yml
new file mode 100644
index 000000000..a259ecb8a
--- /dev/null
+++ b/config/locales/actions.en.yml
@@ -0,0 +1,12 @@
+en:
+ actions:
+ edit: "Edit"
+ destroy: "Destroy"
+ search: "Search"
+ add: "Add new"
+ or: "or"
+ cancel: "Cancel"
+ search_hint: "Type in a search term"
+ no_result_text: "No Results"
+ searching_term: "Searching..."
+
diff --git a/config/locales/actions.yml b/config/locales/actions.fr.yml
index 7f743f60b..60daa21f7 100644
--- a/config/locales/actions.yml
+++ b/config/locales/actions.fr.yml
@@ -1,14 +1,3 @@
-en:
- actions:
- edit: "Edit"
- destroy: "Destroy"
- search: "Search"
- add: "Add new"
- or: "or"
- cancel: "Cancel"
- search_hint: "Type in a search term"
- no_result_text: "No Results"
- searching_term: "Searching..."
fr:
actions:
edit: "Modifier"
diff --git a/config/locales/api_keys.en.yml b/config/locales/api_keys.en.yml
new file mode 100644
index 000000000..221fa6eef
--- /dev/null
+++ b/config/locales/api_keys.en.yml
@@ -0,0 +1,20 @@
+en:
+ api_keys:
+ actions:
+ new: "Add a new api key"
+ edit: "Edit this api key"
+ destroy: "Remove this api key"
+ destroy_confirm: "Are you sure you want destroy this api key?"
+ show:
+ title: "Api key"
+ new:
+ title: "Add a new api key"
+ edit:
+ title: "Update api key"
+ activerecord:
+ models:
+ api_key: "Api Key"
+ attributes:
+ api_key:
+ name: "Name"
+ token: "Token"
diff --git a/config/locales/api_keys.fr.yml b/config/locales/api_keys.fr.yml
new file mode 100644
index 000000000..c45aea925
--- /dev/null
+++ b/config/locales/api_keys.fr.yml
@@ -0,0 +1,20 @@
+fr:
+ api_keys:
+ actions:
+ new: "Ajouter une clé d'accès API"
+ edit: "Modifier la clé d'accès API"
+ destroy: "Supprimer la clé d'accès API"
+ destroy_confirm: "Etes vous sûr de vouloir détruire la clé d'accès API ?"
+ show:
+ title: "Clé d'accès API"
+ new:
+ title: "Ajouter une clé d'accès API"
+ edit:
+ title: "Modifier la clé d'accès API"
+ activerecord:
+ models:
+ api_key: "Clé d'accès API"
+ attributes:
+ api_key:
+ name: "Nom"
+ token: "Token"
diff --git a/config/locales/api_keys.yml b/config/locales/api_keys.yml
deleted file mode 100644
index e64bbb5b5..000000000
--- a/config/locales/api_keys.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-en:
- api_keys:
- actions:
- new: "Add a new api key"
- edit: "Edit this api key"
- destroy: "Remove this api key"
- destroy_confirm: "Are you sure you want destroy this api key?"
- new:
- title: "Add a new api key"
- edit:
- title: "Update api key"
- activerecord:
- models:
- api_key: "Api Key"
- attributes:
- api_key:
- name: "Name"
- token: "Token"
-fr:
- api_keys:
- actions:
- new: "Ajouter une clé d'accès API"
- edit: "Modifier la clé d'accès API"
- destroy: "Supprimer la clé d'accès API"
- destroy_confirm: "Etes vous sûr de vouloir détruire la clé d'accès API ?"
- new:
- title: "Ajouter une clé d'accès API"
- edit:
- title: "Modifier la clé d'accès API"
- activerecord:
- models:
- api_key: "Clé d'accès API"
- attributes:
- api_key:
- name: "Nom"
- token: "Token"
-
diff --git a/config/locales/area_types.yml b/config/locales/area_types.en.yml
index 95d154521..a525bceda 100644
--- a/config/locales/area_types.yml
+++ b/config/locales/area_types.en.yml
@@ -6,12 +6,3 @@ en:
commercial_stop_point: "Commercial Stop Point"
stop_place: "Stop Place"
itl: "Restriction Constraint"
-
-fr:
- area_types:
- label:
- boarding_position: "Point d'embarquement"
- quay: "Quai"
- commercial_stop_point: "Arrêt commercial"
- stop_place: "Pôle d'échange"
- itl: "ITL"
diff --git a/config/locales/area_types.fr.yml b/config/locales/area_types.fr.yml
new file mode 100644
index 000000000..ddc0a8c56
--- /dev/null
+++ b/config/locales/area_types.fr.yml
@@ -0,0 +1,8 @@
+fr:
+ area_types:
+ label:
+ boarding_position: "Point d'embarquement"
+ quay: "Quai"
+ commercial_stop_point: "Arrêt commercial"
+ stop_place: "Pôle d'échange"
+ itl: "ITL"
diff --git a/config/locales/breadcrumbs.en.yml b/config/locales/breadcrumbs.en.yml
new file mode 100644
index 000000000..911c992c3
--- /dev/null
+++ b/config/locales/breadcrumbs.en.yml
@@ -0,0 +1,6 @@
+en:
+ breadcrumbs:
+ vehicle_journeys: "Passing times"
+ vehicle_journey_frequencies: "Times bands"
+ referentials: "Home"
+ users: "Users"
diff --git a/config/locales/breadcrumbs.yml b/config/locales/breadcrumbs.fr.yml
index ccf97c414..ffcba3015 100644
--- a/config/locales/breadcrumbs.yml
+++ b/config/locales/breadcrumbs.fr.yml
@@ -1,10 +1,6 @@
-en:
- breadcrumbs:
- vehicle_journeys: "Passing times"
- referentials: "Home"
- users: "Users"
fr:
breadcrumbs:
vehicle_journeys: "Horaires"
+ vehicle_journey_frequencies: "Créneaux horaires"
referentials: "Accueil"
users: "Utilisateurs"
diff --git a/config/locales/clean_ups.en.yml b/config/locales/clean_ups.en.yml
new file mode 100644
index 000000000..27b3dc5c1
--- /dev/null
+++ b/config/locales/clean_ups.en.yml
@@ -0,0 +1,27 @@
+en:
+ clean_ups:
+ success_tm: "%{count} time tables deleted"
+ success_vj: "%{count} vehicle journeys deleted"
+ success_jp: "%{count} journey patterns deleted"
+ success_r: "%{count} routes deleted"
+ success_l: "%{count} lines deleted"
+ success_sa: "%{count} stop areas deleted"
+ success_c: "%{count} companies deleted"
+ success_n: "%{count} networks deleted"
+ success_g: "%{count} groups of lines deleted"
+ failure: "Fail when clean_up : %{error_message}"
+ actions:
+ clean_up: "clean up"
+ confirm: "Clean up will destroy time tables which ended on requested date\nand next recursively all object without any time table\nPlease confirm this action"
+ activemodel:
+ attributes:
+ clean_up:
+ expected_date: "Final date : "
+ keep_lines: "keep lines"
+ keep_stops: "keep stop areas"
+ keep_companies: "keep companies"
+ keep_networks: "keep networks"
+ keep_group_of_lines: "keep groups of lines"
+ titles:
+ clean_up:
+ expected_date: "value included in clean up"
diff --git a/config/locales/clean_ups.yml b/config/locales/clean_ups.fr.yml
index 1776d8e0b..13d34ac4c 100644
--- a/config/locales/clean_ups.yml
+++ b/config/locales/clean_ups.fr.yml
@@ -1,30 +1,3 @@
-en:
- clean_ups:
- success_tm: "%{count} time tables deleted"
- success_vj: "%{count} vehicle journeys deleted"
- success_jp: "%{count} journey patterns deleted"
- success_r: "%{count} routes deleted"
- success_l: "%{count} lines deleted"
- success_sa: "%{count} stop areas deleted"
- success_c: "%{count} companies deleted"
- success_n: "%{count} networks deleted"
- success_g: "%{count} groups of lines deleted"
- failure: "Fail when clean_up : %{error_message}"
- actions:
- clean_up: "clean up"
- confirm: "Clean up will destroy time tables which ended on requested date\nand next recursively all object without any time table\nPlease confirm this action"
- activemodel:
- attributes:
- clean_up:
- expected_date: "Final date : "
- keep_lines: "keep lines"
- keep_stops: "keep stop areas"
- keep_companies: "keep companies"
- keep_networks: "keep networks"
- keep_group_of_lines: "keep groups of lines"
- titles:
- clean_up:
- expected_date: "value included in clean up"
fr:
clean_ups:
success_tm: "%{count} calendrier(s) supprimé(s)"
diff --git a/config/locales/companies.en.yml b/config/locales/companies.en.yml
new file mode 100644
index 000000000..14f389bf0
--- /dev/null
+++ b/config/locales/companies.en.yml
@@ -0,0 +1,65 @@
+en:
+ companies:
+ actions:
+ new: "Add a new company"
+ edit: "Edit this company"
+ destroy: "Remove this company"
+ destroy_confirm: "Are you sure you want destroy this company?"
+ new:
+ title: "Add a new company"
+ edit:
+ title: "Update company %{company}"
+ show:
+ title: "Company %{company}"
+ index:
+ title: "Companies"
+ name: "Search by name"
+ activerecord:
+ models:
+ company:
+ zero: "company"
+ one: "company"
+ other: "companies"
+ attributes:
+ company:
+ registration_number: "Registration number"
+ name: "Name"
+ short_name: "Short name"
+ organizational_unit: "Unit"
+ operating_department_name: "Department"
+ code: "Code"
+ phone: "Phone number"
+ fax: "Fax number"
+ email: "Email"
+ time_zone: "Time zone"
+ url: "Web page"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by "
+ formtastic:
+ titles:
+ company:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters "
+ objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ company:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters "
+ objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ company:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters "
+ objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ company:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters "
+ objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ company:
+ name: "maximum 75 characters"
+ registration_number: "Positif integer, unique key, of no more than 8 digits."
+ objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 3."
diff --git a/config/locales/companies.fr.yml b/config/locales/companies.fr.yml
new file mode 100644
index 000000000..ccb425f1d
--- /dev/null
+++ b/config/locales/companies.fr.yml
@@ -0,0 +1,65 @@
+fr:
+ companies:
+ actions:
+ new: "Ajouter un transporteur"
+ edit: "Modifier ce transporteur"
+ destroy: "Supprimer ce transporteur"
+ destroy_confirm: "Etes vous sûr de supprimer ce transporteur ?"
+ new:
+ title: "Ajouter un transporteur"
+ edit:
+ title: "Modifier le transporteur %{company}"
+ show:
+ title: "Transporteur %{company}"
+ index:
+ title: "Transporteurs"
+ name: "Recherche par nom"
+ activerecord:
+ models:
+ company:
+ zero: "transporteur"
+ one: "transporteur"
+ other: "transporteurs"
+ attributes:
+ company:
+ registration_number: "Numéro d'enregistrement"
+ name: "Nom"
+ short_name: "Nom court"
+ organizational_unit: "Nom d'unité dans la société"
+ operating_department_name: "Nom du département dans la société"
+ code: "Code"
+ phone: "Numéro de téléphone"
+ fax: "Numéro de fax"
+ email: "Email"
+ time_zone: "Fuseau horaire"
+ url: "Page web associée"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ formtastic:
+ titles:
+ company:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ neptune:
+ company:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ netex:
+ company:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ gtfs:
+ company:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ hub:
+ company:
+ name: "maximum 75 caractères"
+ registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
+ objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 3."
diff --git a/config/locales/companies.yml b/config/locales/companies.yml
deleted file mode 100644
index 9ffbdc0d5..000000000
--- a/config/locales/companies.yml
+++ /dev/null
@@ -1,133 +0,0 @@
-en:
- companies:
- actions:
- new: "Add a new company"
- edit: "Edit this company"
- destroy: "Remove this company"
- destroy_confirm: "Are you sure you want destroy this company?"
- new:
- title: "Add a new company"
- edit:
- title: "Update company %{company}"
- show:
- title: "Company %{company}"
- index:
- title: "Companies"
- name: "Search by name"
- activerecord:
- models:
- company:
- zero: "company"
- one: "company"
- other: "companies"
- attributes:
- company:
- registration_number: "Registration number"
- name: "Name"
- short_name: "Short name"
- organizational_unit: "Unit"
- operating_department_name: "Department"
- code: "Code"
- phone: "Phone number"
- fax: "Fax number"
- email: "Email"
- time_zone: "Time zone"
- url: "Web page"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by "
- formtastic:
- titles:
- company:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters "
- objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- neptune:
- company:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters "
- objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- netex:
- company:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters "
- objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- gtfs:
- company:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters "
- objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- hub:
- company:
- name: "Only alphanumerical or underscore characters. Maximum length = 75."
- registration_number: "Positif integer, unique key, of no more than 8 digits."
- objectid: "[prefix]:Company:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 3."
-
-fr:
- companies:
- actions:
- new: "Ajouter un transporteur"
- edit: "Modifier ce transporteur"
- destroy: "Supprimer ce transporteur"
- destroy_confirm: "Etes vous sûr de supprimer ce transporteur ?"
- new:
- title: "Ajouter un transporteur"
- edit:
- title: "Modifier le transporteur %{company}"
- show:
- title: "Transporteur %{company}"
- index:
- title: "Transporteurs"
- name: "Recherche par nom"
- activerecord:
- models:
- company:
- zero: "transporteur"
- one: "transporteur"
- other: "transporteurs"
- attributes:
- company:
- registration_number: "Numéro d'enregistrement"
- name: "Nom"
- short_name: "Nom court"
- organizational_unit: "Nom d'unité dans la société"
- operating_department_name: "Nom du département dans la société"
- code: "Code"
- phone: "Numéro de téléphone"
- fax: "Numéro de fax"
- email: "Email"
- time_zone: "Fuseau horaire"
- url: "Page web associée"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- formtastic:
- titles:
- company:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- neptune:
- company:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- netex:
- company:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- gtfs:
- company:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- hub:
- company:
- name: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 75."
- registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
- objectid: "[prefixe]:Company:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 3."
-
-
diff --git a/config/locales/compliance_check_results.en.yml b/config/locales/compliance_check_results.en.yml
new file mode 100644
index 000000000..dcc0f4598
--- /dev/null
+++ b/config/locales/compliance_check_results.en.yml
@@ -0,0 +1,455 @@
+en:
+ compliance_check_results:
+ errors: 'Errors'
+ file:
+ zip_name_prefix: "compliance_check_results"
+ summary_errors_file_prefix: "summary_of_tests.csv"
+ detailed_errors_file_prefix: "detail_of_errors.csv"
+ index:
+ line: "Li"
+ column: "Col"
+ in_progress: "Compliance check in progress..."
+ compliance_check_result:
+ severities:
+ error: "Required"
+ warning: "Optional"
+ error_txt: "Required"
+ warning_txt: "Optional"
+ statuses:
+ nok: "Error"
+ uncheck: "Unavailable"
+ ok: "Success"
+ details:
+ #### level 1
+ ## NEPTUNE
+ detail_1_neptune_xml_1: "%{source_label} : %{error_value}"
+ detail_1_neptune_xml_2: "%{source_label} : %{error_value}"
+
+ ## GTFS
+ detail_1_gtfs_csv_1: "le fichier %{filename} est inexploitable"
+ detail_1_gtfs_csv_2: "le fichier %{filename} est inexploitable"
+ detail_1_gtfs_csv_3: "le fichier %{filename} contient un entête vide"
+ detail_1_gtfs_csv_4: "le fichier %{filename} contient des entêtes en double"
+ detail_1_gtfs_csv_5: "la ligne du fichier %{filename} ne respecte pas la syntaxe CSV"
+ detail_1_gtfs_csv_6: "le fichier %{filename} contient des balises HTML"
+ detail_1_gtfs_csv_7: "la valeur '%{error_value}' du champ %{reference_value} contient des espaces aux extrémités"
+
+ detail_1_gtfs_common_1: "le fichier %{filename} est obligatoire"
+ detail_1_gtfs_common_2: "l'un des fichiers calendar.txt ou calendar_dates.txt est obligatoire"
+ detail_1_gtfs_common_3: "le fichier %{filename} optionnel n'est pas présent"
+ detail_1_gtfs_common_4: "le fichier %{filename} n'est pas traité"
+ detail_1_gtfs_common_5: "le fichier %{filename} obligatoire doit définir au moins une entrée"
+ detail_1_gtfs_common_6: "l'un des deux fichiers calendar.txt ou calendar_dates.txt doit définir au moins une entrée"
+ detail_1_gtfs_common_7: "le fichier %{filename} optionnel ne contient aucune entrée"
+ detail_1_gtfs_common_8: "la valeur %{error_value} est définie plusieurs fois pour la colonne %{reference_value}"
+ detail_1_gtfs_common_9: "la colonne %{error_value} est obligatoire"
+ detail_1_gtfs_common_10: "la colonne agency_id devrait être présente dans le fichier %{filename}"
+ detail_1_gtfs_common_11: "la colonne %{error_value} n'est pas exploitée dans le fichier %{filename}"
+ detail_1_gtfs_common_12: "la valeur de la colonne %{error_value} n'est pas renseignée"
+ detail_1_gtfs_common_13: "la colonne agency_id doit être présente dans le fichier %{filename}"
+ detail_1_gtfs_common_14: "la colonne agency_id est absente dans le fichier %{filename}"
+ detail_1_gtfs_common_15_1: "la valeur arrival_time est obligatoire en présence d'une valeur pour departure_time"
+ detail_1_gtfs_common_15_2: "la valeur departure_time est obligatoire en présence d'une valeur pour arrival_time"
+ detail_1_gtfs_common_15_3: "la valeur min_transfer_time est obligatoire quand transfer_type=2"
+ detail_1_gtfs_common_16: "la valeur %{error_value} n'est pas autorisée pour le champs %{reference_value} "
+
+ detail_1_gtfs_route_1: "les champs route_long_name et route_short_name ne sont pas définies"
+ detail_1_gtfs_route_2: "les valeurs des champs route_long_name et route_short_name ne sont pas renseignées"
+
+ detail_1_gtfs_calendar_1: "aucun jour d'application n'est activé"
+ detail_1_gtfs_calendar_2: "la date de fin du calendrier est antérieur ou égale à la date début"
+
+ #### level 2
+ ## NEPTUNE
+ detail_2_neptune_common_1: "L'élément %{source_objectid} a des attributs qui diffèrent entre les différents fichiers qui le définissent"
+ detail_2_neptune_common_2: "L'élément %{source_objectid} partage l'attribut RegistrationNumber = %{error_value} avec un autre objet de même type"
+ detail_2_neptune_network_1: "La ligne %{source_objectid} est absente de la liste des lignes du réseau %{target_0_objectid}"
+ detail_2_neptune_network_2: "Le réseau %{source_objectid} a un type de source non valide : %{error_value}, remplacé par %{reference_value}"
+ detail_2_neptune_groupofline_1: "La ligne %{source_objectid} est absente de la liste des lignes du du groupe de lignes %{target_0_objectid}"
+ detail_2_neptune_stoparea_1: "Le fils (contains = %{error_value}) de l'arrêt %{source_objectid} n'est pas de type StopArea ni StopPoint"
+ detail_2_neptune_stoparea_2: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type StopPlace ou CommercialStopPoint, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
+ detail_2_neptune_stoparea_3: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type BoardingPosition ou Quay, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
+ detail_2_neptune_stoparea_4: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des points d'arrêt de séquence, or un des arrêts contenus (contains = %{target_0_objectid}) est un StopArea arrêt de type %{error_value}"
+ detail_2_neptune_stoparea_5: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{error_value}) inexistante"
+ detail_2_neptune_stoparea_6: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{target_0_objectid}) qui ne le référence pas en retour (containedIn = %{error_value})"
+ detail_2_neptune_itl_1: "Le fils (contains = %{target_0_objectid}) de type %{error_value} ne peut pas être contenu dans l'arrêt %{source_objectid} de type %{reference_value}"
+ detail_2_neptune_itl_2: "L'arrêt de type ITL %{source_objectid} n'est pas utilisé"
+ detail_2_neptune_itl_3: "L'arrêt areaId = %{error_value} référencé par l'ITL %{source_objectid} n'existe pas"
+ detail_2_neptune_itl_4: "L'arrêt areaId = %{target_0_objectid} référencé par l'ITL %{source_objectid} devrait être de type ITL et non de type %{error_value}"
+ detail_2_neptune_itl_5: "La référence lineIdShortCut = %{error_value} de l'ITL %{source_objectid} n'est pas cohérente avec la ligne %{target_0_objectid}"
+ detail_2_neptune_areacentroid_1: "La position géographique <AreaCentroid> %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
+ detail_2_neptune_areacentroid_2: "La position géographique <AreaCentroid> %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ detail_2_neptune_connectionlink_1: "La correspondance %{source_objectid} référence 2 arrêts inexistants"
+ detail_2_neptune_accesspoint_1: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{error_value}) inexistant"
+ detail_2_neptune_accesspoint_2: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{target_0_objectid}) de type invalide (ITL)"
+ detail_2_neptune_accesspoint_3: "L'accès %{source_objectid} n'a pas de lien d'accès"
+ detail_2_neptune_accesspoint_4: "L'accès %{source_objectid} de type In a des liens d'accès sortants"
+ detail_2_neptune_accesspoint_5: "L'accès %{source_objectid} de type Out a des liens d'accès entrants"
+ detail_2_neptune_accesspoint_6: "L'accès %{source_objectid} de type InOut n'a que des liens d'accès entrants ou sortants"
+ detail_2_neptune_accesspoint_7: "L'accès %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ detail_2_neptune_accesslink_1: "La liaison d'accès %{source_objectid} référence %{error_value} qui n'existe pas"
+ detail_2_neptune_accesslink_2: "Sur la liaison d'accès %{source_objectid}, les références startOfLink = %{error_value} et endOfLink = %{reference_value} sont de même type"
+ detail_2_neptune_line_1: "La ligne %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value} inexistant"
+ detail_2_neptune_line_2: "La ligne %{source_objectid} référence un point d'arrêt <StopPoint> (lineEnd = %{error_value}) inexistant "
+ detail_2_neptune_line_3: "La ligne %{source_objectid} référence un point d'arrêt (lineEnd = %{error_value}) qui n'est pas terminus d'une séquence d'arrêts"
+ detail_2_neptune_line_4: "La ligne %{source_objectid} référence une séquence d'arrêt (routeId = %{error_value}) inexistante"
+ detail_2_neptune_line_5: "La séquence d'arrêts (routeId = %{target_0_objectid}) n'est pas référencée par la ligne %{source_objectid}"
+ detail_2_neptune_line_6: "La ligne %{source_objectid} ne renseigne aucun des champs name, number ou publishedName"
+ detail_2_neptune_route_1: "La séquence d'arrêts %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
+ detail_2_neptune_route_2: "La séquence d'arrêts %{source_objectid} référence un tronçon (ptLinkId = %{error_value}) inexistant"
+ detail_2_neptune_route_3: "La séquence retour (waybackRouteId = %{error_value}) de la séquence d'arrêts %{source_objectid} n'existe pas"
+ detail_2_neptune_route_4: "Le tronçon (ptLinkId = %{error_value}) référencé par la séquence d'arrêt %{source_objectid} est partagé avec %{target_0_objectid}"
+ detail_2_neptune_route_5: "Le tronçon %{source_objectid} partage un %{reference_value} : %{error_value} avec un autre tronçon"
+ detail_2_neptune_route_6_1: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons forme un anneau"
+ detail_2_neptune_route_6_2: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons est rompu au tronçon %{target_0_objectid}"
+ detail_2_neptune_route_7: "La séquence d'arrêts %{source_objectid} ne référence pas la mission %{target_0_objectid} alors que cette mission référence la séquence d'arrêt"
+ detail_2_neptune_route_8: "La mission journeyPatternId = %{target_0_objectid} de la séquence d'arrêts %{source_objectid} utilise des points d'arrêts hors séquence"
+ detail_2_neptune_route_9: "Le point d'arrêt (stopPointId = %{target_0_objectid}) de la séquence d'arrêts %{source_objectid} n'est utilisé dans aucune mission"
+ detail_2_neptune_route_10: "La séquence retour (waybackRouteId = %{target_0_objectid}) ne référence pas la séquence d'arrêts %{source_objectid} comme retour"
+ detail_2_neptune_route_11: "Le sens (%{reference_value}) de la séquence d'arrêt %{source_objectid} n'est pas compatible avec celui (%{error_value}) de la séquence opposée %{target_0_objectid}"
+ detail_2_neptune_route_12: "Le départ dans la zone %{reference_value}) de la séquence d'arrêts %{source_objectid} n'est pas dans la même zone que l'arrivée (zone %{error_value} de la séquence retour %{target_0_objectid}"
+ detail_2_neptune_ptlink_1: "Le tronçon %{source_objectid} reférence un %{reference_value} = %{error_value} inexistant"
+ detail_2_neptune_journeypattern_1: "La mission %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
+ detail_2_neptune_journeypattern_2: "La mission %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value}) inexistant"
+ detail_2_neptune_journeypattern_3: "La mission %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
+ detail_2_neptune_stoppoint_1: "Le point d'arrêt %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
+ detail_2_neptune_stoppoint_2: "Le point d'arrêt %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value}) inexistant"
+ detail_2_neptune_stoppoint_3: "Le point d'arrêt %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
+ detail_2_neptune_stoppoint_4: "Le point d'arrêt %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ detail_2_neptune_timetable_1: "Le calendrier (<Timetable>) %{source_objectid} ne référence aucune course existante"
+ detail_2_neptune_timetable_2: "La course %{source_objectid} n'est référencée dans aucun calendrier (<Timetable>)"
+ detail_2_neptune_timetable_3: "Le calendrier (<Timetable>) %{source_objectid} contient une période invalide"
+ detail_2_neptune_vehiclejourney_1: "La course %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_2: "La course %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_3: "La course %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_4: "La course %{source_objectid} référence un opérateur (operatorId = %{error_value}) inexistant"
+ detail_2_neptune_vehiclejourney_5: "La course %{source_objectid} référence une fréquence horaire (timeSlotId = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_6: "La course %{source_objectid} référence une mission %{error_value} incompatible de la séquence d'arrêts %{reference_value}"
+ detail_2_neptune_vehiclejourney_7: "La mission %{source_objectid} n'est référencée par aucune course"
+ detail_2_neptune_vehiclejourney_8: "La course %{source_objectid} doit référencer une mission si la séquence d'arrêt en possède plusieurs"
+ detail_2_neptune_vehiclejourneyatstop_1: "La course %{source_objectid} fournit un horaire sur un point d'arrêt (stopPointId = %{error_value}) inexistant"
+ detail_2_neptune_vehiclejourneyatstop_2: "Un horaire de la course %{source_objectid} référence une autre course : vehicleJourneyId = %{error_value}"
+ detail_2_neptune_vehiclejourneyatstop_3: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts selon l'ordre de la séquence d'arrêts %{error_value}"
+ detail_2_neptune_vehiclejourneyatstop_4: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts de sa mission %{error_value}"
+ detail_2_neptune_facility_1: "L'équipement %{source_objectid} est situé sur un arrêt inexistant (containedId = %{error_value})"
+ detail_2_neptune_facility_2: "L'équipement %{source_objectid} référence un arrêt (stopAreaId = %{error_value}) inexistant"
+ detail_2_neptune_facility_3: "L'équipement %{source_objectid} référence une ligne (lineId = %{error_value} inexistante"
+ detail_2_neptune_facility_4: "L'équipement %{source_objectid} référence une correspondance (connectionLinkId = %{error_value} inexistante"
+ detail_2_neptune_facility_5: "L'équipement %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value} inexistant"
+ detail_2_neptune_facility_6: "L'équipement %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+
+ ## GTFS
+ detail_2_gtfs_common_1: "Identifiant %{reference_value} inconnu : %{error_value}"
+ detail_2_gtfs_common_2: "Identifiant %{reference_value} non référencé : %{error_value}"
+ detail_2_gtfs_common_3: "Le couple de champs (%{reference_value}) est en doublon (%{error_value}): "
+ detail_2_gtfs_common_4: "Les valeurs des champs (%{reference_value}) sont identiques : '%{error_value}'"
+ detail_2_gtfs_stop_1: "L'arrêt (%{source_objectid}) ne peut appartenir à un parent de type %{error_value}"
+ detail_2_gtfs_stop_2: "La colonne location_type n'est pas renseignée"
+ detail_2_gtfs_stop_3: "Le nom et la description de l'arrêt (%{source_objectid}) sont identiques : '%{error_value}'"
+ detail_2_gtfs_stop_4: "L'arrêt (%{source_objectid}) de type station ne peut appartenir à une autre station (%{error_value})"
+ detail_2_gtfs_route_1: "La route (%{source_objectid}) a la même valeur (%{error_value}) pour route_short_name et route_long_name"
+ detail_2_gtfs_route_2: "La route (%{source_objectid}) réutilise la valeur de route_short_name (%{error_value}) dans route_long_name (%{reference_value})"
+ detail_2_gtfs_route_3: "les couleurs de la route (%{source_objectid}) ne sont pas contrastées"
+ detail_2_gtfs_route_4: "La route (%{source_objectid}) utilise les valeurs (route_short_name,route_long_name) de la route (%{error_value}) "
+
+ #### level 3
+ detail_3_stoparea_1: "L'arrêt %{source_label} (%{source_objectid}) n'est pas géolocalisé"
+ detail_3_stoparea_2: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop près de l'arrêt %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
+ detail_3_stoparea_3: "Les arrêts %{source_label} (%{source_objectid} et %{target_0_objectid}) sont desservis par les mêmes lignes"
+ detail_3_stoparea_4: "L'arrêt %{source_label} (%{source_objectid}) est en dehors du périmètre de contrôle"
+ detail_3_stoparea_5: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
+ detail_3_accesspoint_1: "L'accès %{source_label} (%{source_objectid}) n'est pas géolocalisé"
+ detail_3_accesspoint_2: "L'accès %{source_label} (%{source_objectid}) est localisé trop près de l'accès %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
+ detail_3_accesspoint_3: "L'accès %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
+ detail_3_connectionlink_1: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
+ detail_3_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
+ detail_3_connectionlink_3_1: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_connectionlink_3_2: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_connectionlink_3_3: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_connectionlink_3_4: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
+ detail_3_accesslink_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
+ detail_3_accesslink_3_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_3_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_3_3: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_3_4: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_line_1: "La ligne %{source_label} (%{source_objectid}) a une ligne homonyme sur le même réseau %{target_0_label} (%{target_0_objectid})"
+ detail_3_line_2: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
+ detail_3_route_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), l'arrêt %{target_0_label} (%{target_0_objectid}) est desservi 2 fois consécutivement"
+ detail_3_route_2: "Les terminus de la séquence d'arrêt %{source_label} (%{source_objectid}) ne sont pas cohérent avec ceux de sa séquence opposée : l'une part de %{target_0_label} (%{target_0_objectid}) et l'autre arrive à %{target_1_label} (%{target_1_objectid})"
+ detail_3_route_3_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} < %{reference_value} "
+ detail_3_route_3_2: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} > %{reference_value} "
+ detail_3_route_4: "La séquence d'arrêt %{source_label} (%{source_objectid}) utilise la même liste ordonnée d'arrêts que la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
+ detail_3_route_5: "La séquence d'arrêt %{source_label} (%{source_objectid}) peut admettre la séquence %{target_0_label} (%{target_0_objectid}) comme séquence opposée"
+ detail_3_route_6: "La séquence d'arrêt %{source_label} (%{source_objectid}) doit avoir un minimum de 2 arrêts"
+ detail_3_route_7: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission"
+ detail_3_route_8: "La séquence d'arrêt %{source_label} (%{source_objectid}) a %{error_value} arrêts non utilisés par des missions"
+ detail_3_route_9: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission desservant l'ensemble de ses arrêts"
+ detail_3_journeypattern_1: "La mission %{source_label} (%{source_objectid}) utilise les mêmes arrêts que la mission %{target_0_label} (%{target_0_objectid}) - nombre d'arrêts = %{error_value}"
+ detail_3_vehiclejourney_1: "Arrêt %{target_0_label} (%{target_0_objectid}) : durée d'arrêt mesurée %{error_value} > %{reference_value}"
+ detail_3_vehiclejourney_2_1: "La course %{source_label} (%{source_objectid}) a des horaires décroissants entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
+ detail_3_vehiclejourney_2_2: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} < %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
+ detail_3_vehiclejourney_2_3: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} > %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
+ detail_3_vehiclejourney_3: "La course %{source_label} (%{source_objectid}) a une variation de progression entre les arrêts %{target_1_label} (%{target_1_objectid}) et %{target_2_label} (%{target_2_objectid}) %{error_value} > %{reference_value} avec la course %{target_0_label} (%{target_0_objectid})"
+ detail_3_vehiclejourney_4: "La course %{source_label} (%{source_objectid}) n'a pas de calendrier d'application"
+ detail_3_facility_1: "L'équipement %{source_label} (%{source_objectid}) n'est pas géolocalisé"
+ detail_3_facility_2: "L'équipement %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{areaName} (%{areaId}) : distance %{error_value} > %{reference_value}"
+
+ detail_4_network_1_min_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value}) "
+ detail_4_network_1_max_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_network_1_pattern: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_network_1_unique: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) a une valeur partagée avec le réseau %{target_0_label} (%{target_0_objectid})"
+ detail_4_company_1_min_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_company_1_max_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_company_1_pattern: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_company_1_unique: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) a une valeur partagée avec le transporteur %{target_0_label} (%{target_0_objectid})"
+ detail_4_groupofline_1_min_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_groupofline_1_max_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_groupofline_1_pattern: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_groupofline_1_unique: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) a une valeur partagée avec le groupe de lignes %{target_0_label} (%{target_0_objectid})"
+ detail_4_stoparea_1_min_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_stoparea_1_max_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_stoparea_1_pattern: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_stoparea_1_unique: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) a une valeur partagée avec l'arrêt %{target_0_label} (%{target_0_objectid})"
+ detail_4_stoparea_2: "L'arrêt physique %{source_label} (%{source_objectid}) n'a pas de parent"
+ detail_4_accesspoint_1_min_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_accesspoint_1_max_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_accesspoint_1_pattern: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_accesspoint_1_unique: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le point d'accès %{target_0_label} (%{target_0_objectid})"
+ detail_4_accesslink_1_min_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_accesslink_1_max_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_accesslink_1_pattern: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_accesslink_1_unique: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le lien d'accès %{target_0_label} (%{target_0_objectid})"
+ detail_4_connectionlink_1_min_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_connectionlink_1_max_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_connectionlink_1_pattern: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_connectionlink_1_unique: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) a une valeur partagée avec la correspondance %{target_0_label} (%{target_0_objectid})"
+ detail_4_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}) au moins l'un des arrêts %{startName} (%{startId}) et %{endName} (%{endId}) n'est pas un arrêt physique"
+ detail_4_timetable_1_min_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_timetable_1_max_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_timetable_1_pattern: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_timetable_1_unique: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) a une valeur partagée avec le calendrier %{target_0_label} (%{target_0_objectid})"
+ detail_4_line_1_min_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_line_1_max_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_line_1_pattern: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_line_1_unique: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) a une valeur partagée avec la ligne %{target_0_label} (%{target_0_objectid})"
+ detail_4_line_2: "La ligne %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
+ detail_4_line_3_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de groupe de lignes"
+ detail_4_line_3_2: "La ligne %{source_label} (%{source_objectid}) a plusieurs groupes de lignes"
+ detail_4_line_4_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
+ detail_4_line_4_2: "La ligne %{source_label} (%{source_objectid}) a trop de séquences d'arrêts non associées (%{error_value})"
+ detail_4_route_1_min_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_route_1_max_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_route_1_pattern: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_route_1_unique: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) a une valeur partagée avec la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
+ detail_4_journeypattern_1_min_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_journeypattern_1_max_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_journeypattern_1_pattern: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_journeypattern_1_unique: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) a une valeur partagée avec la mission %{target_0_label} (%{target_0_objectid})"
+ detail_4_vehiclejourney_1_min_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_vehiclejourney_1_max_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_vehiclejourney_1_pattern: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_vehiclejourney_1_unique: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) a une valeur partagée avec la course %{target_0_label} (%{target_0_objectid})"
+ detail_4_vehiclejourney_2: "La course %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
+ activemodel:
+ models:
+ compliance_check_result:
+ zero: "Validation"
+ one: "Validation"
+ other: "Validation"
+ attributes:
+ compliance_check_result:
+ 1-NEPTUNE-XML-1: "Conformité à la syntaxe XML suivant les recommandations du W3C."
+ 1-NEPTUNE-XML-2: "Conformité au schéma défini par la XSD du profil TRIDENT/NEPTUNE."
+ 2-NEPTUNE-Common-1: "Unicité des éléments objectId des différents objets d'un lot de fichiers Neptune."
+ 2-NEPTUNE-Common-2: "Unicité des éléments regitrationNumber des différents objets d'un lot de fichiers Neptune."
+ 2-NEPTUNE-Network-1: "Correcte référence à des lignes <Line> dans version du réseau <PTNetwork>."
+ 2-NEPTUNE-Network-2: "Valeur autorisée pour le type de source <SourceType> dans version du réseau <PTNetwork>."
+ 2-NEPTUNE-GroupOfLine-1: "Correcte référence à des lignes <Line> dans groupe de lignes <GroupOfLine>."
+ 2-NEPTUNE-StopArea-1: "Correcte référence à des arrêts <StopArea> et/ou à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea>."
+ 2-NEPTUNE-StopArea-2: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type StopPlace."
+ 2-NEPTUNE-StopArea-3: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type CommercialStopPoint."
+ 2-NEPTUNE-StopArea-4: "Correcte référence à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea> de type BoardingPosition ou Quay."
+ 2-NEPTUNE-StopArea-5: "Correcte référence à une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
+ 2-NEPTUNE-StopArea-6: "référenceréciproque d'une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
+ 2-NEPTUNE-ITL-1: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type ITL."
+ 2-NEPTUNE-ITL-2: "Correcte référence à des arrêts <StopArea> de type ITL dans la classe d’objets <ITL>."
+ 2-NEPTUNE-ITL-3: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <ITL>."
+ 2-NEPTUNE-ITL-4: "Vérification du type de référence à des arrêts <StopArea> type ITL dans la classe d’objets <ITL>."
+ 2-NEPTUNE-ITL-5: "Bonne référence à la ligne <Line> dans la classe d’objets <ITL>."
+ 2-NEPTUNE-AreaCentroid-1: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <AreaCentroid>."
+ 2-NEPTUNE-AreaCentroid-2: "Vérification du modèle de projection de référence utilisé."
+ 2-NEPTUNE-ConnectionLink-1: "Correcte référence aux arrêts <StopArea> définissant des tronçons de correspondance <ConnectionLink>."
+ 2-NEPTUNE-AccessPoint-1: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
+ 2-NEPTUNE-AccessPoint-2: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
+ 2-NEPTUNE-AccessPoint-3: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint>."
+ 2-NEPTUNE-AccessPoint-4: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> de type 'in'."
+ 2-NEPTUNE-AccessPoint-5: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'out'."
+ 2-NEPTUNE-AccessPoint-6: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'inout'."
+ 2-NEPTUNE-AccessPoint-7: "Vérification du modèle de projection de référence utilisé."
+ 2-NEPTUNE-AccessLink-1: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
+ 2-NEPTUNE-AccessLink-2: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
+ 2-NEPTUNE-Line-1: "Correcte référence au réseau dans l'objet ligne <Line>."
+ 2-NEPTUNE-Line-2: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
+ 2-NEPTUNE-Line-3: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
+ 2-NEPTUNE-Line-4: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
+ 2-NEPTUNE-Line-5: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
+ 2-NEPTUNE-Line-6: "Présence d'au moins une valeur parmi <name>,<number> ou <publishedName> dans l'objet ligne <Line>."
+ 2-NEPTUNE-Route-1: "Existence des missions <JourneyPattern> référencées par la séquence d'arrêt <ChouetteRoute>."
+ 2-NEPTUNE-Route-2: "Existence des tronçons commerciaux <PtLink> référencés par la séquence d'arrêt <ChouetteRoute>."
+ 2-NEPTUNE-Route-3: "Existence de la séquence opposée <ChouetteRoute> référencée par la séquence d'arrêt <ChouetteRoute>."
+ 2-NEPTUNE-Route-4: "Correcte référence à un tronçon commercial <PtLink> dans une séquence d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-5: "Vérification que tous les points d'arrêts sur parcours sont rattachés à une séquence d'arrêts <ChouetteRoute> au départ d'un tronçon commercial <PtLink> et/ou à l'arrivée d'un autre tronçon commercial <PtLink> de la même séquence d'arrêts."
+ 2-NEPTUNE-Route-6: "Vérification du correct ordonnancement des points d'arrêts sur parcours <StopPoint> dans le chainage des tronçons <PtLink> d'une séquence d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-7: "référence mutuelle des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-8: "Cohérence des références aux points d'arrêt des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-9: "Utilité des points d'arrêts sur parcours des séquences d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-10: "référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
+ 2-NEPTUNE-Route-11: "Cohérence des sens de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
+ 2-NEPTUNE-Route-12: "Cohérence des terminus de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
+ 2-NEPTUNE-PtLink-1: "Existence des arrêts <StopPoint> référencés par les tronçons commerciaux <PTLink>."
+ 2-NEPTUNE-JourneyPattern-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la mission <JourneyPattern>."
+ 2-NEPTUNE-JourneyPattern-2: "Existence des arrêts <StopPoint> référencés par la mission <JourneyPattern>."
+ 2-NEPTUNE-JourneyPattern-3: "Existence de la ligne <Line> référencée par la mission <JourneyPattern>."
+ 2-NEPTUNE-StopPoint-1: "Existence de la ligne <Line> référencée par l'arrêt <StopPoint>."
+ 2-NEPTUNE-StopPoint-2: "Existence du réseau <PTNetwork> référence par l'arrêt <StopPoint>."
+ 2-NEPTUNE-StopPoint-3: "Existence de l'arrêt <StopArea> référencé par l'arrêt <StopPoint>."
+ 2-NEPTUNE-StopPoint-4: "Vérification du modèle de projection de référence utilisé."
+ 2-NEPTUNE-Timetable-1: "Utilité des calendriers."
+ 2-NEPTUNE-Timetable-2: "Utilité des calendriers."
+ 2-NEPTUNE-Timetable-2: "Validité des dates de début et de fin des périodes des calendriers"
+ 2-NEPTUNE-VehicleJourney-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-2: "Existence de la mission <JourneyPattern> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-3: "Existence de la ligne <Line> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-4: "Existence de l'opérateur <Company> référencé par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-5: "Existence de la tranche horaire <TimeSlot> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-6: "Cohérence entre la course, la mission et la séquence d'arrêts."
+ 2-NEPTUNE-VehicleJourney-7: "Utilité des missions"
+ 2-NEPTUNE-VehicleJourney-8: "Mission implicite"
+ 2-NEPTUNE-VehicleJourneyAtStop-1: "Existence de l'arrêt <StopPoint> référencé par l'horaire <VehicleJourneyAtStop>."
+ 2-NEPTUNE-VehicleJourneyAtStop-2: "Existence de la course <VehicleJourney> référenceé par l'horaire <VehicleJourneyAtStop>."
+ 2-NEPTUNE-VehicleJourneyAtStop-3: "adéquation des horaires de la course à la séquence d'arrêts."
+ 2-NEPTUNE-VehicleJourneyAtStop-4: "adéquation des horaires de la course à la mission."
+ 2-NEPTUNE-Facility-1: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-2: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-3: "Existence de la ligne <Line> référencée par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-4: "Existence de la correspondance <ConnectionLink> référencée par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-5: "Existence de l'arrêt <StopPoint> référencé par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-6: "Vérification du modèle de projection de référence utilisé."
+
+ ## GTFS
+ 1-GTFS-CSV-1: "Contrôle de la lecture du fichier"
+ 1-GTFS-CSV-2: "Contrôle de la syntaxe d'une ligne"
+ 1-GTFS-CSV-3: "Contrôle de la syntaxe des entêtes"
+ 1-GTFS-CSV-4: "Contrôle de la non présence de doublons dans les entêtes"
+ 1-GTFS-CSV-5: "Contrôle de la syntaxe CSV GTFS du fichier"
+ 1-GTFS-CSV-6: "Contrôle de la non présence de balise HTML"
+ 1-GTFS-CSV-7: "Contrôle de la non présence d'espace en début ou fin de colonne"
+
+ 1-GTFS-Common-1: "Contrôle de la présence des fichiers obligatoires"
+ 1-GTFS-Common-2: "Contrôle de la présence des fichiers calendar ou calendar_dates"
+ 1-GTFS-Common-3: "Contrôle de la présence des fichiers optionnels"
+ 1-GTFS-Common-4: "Contrôle de la présence des fichiers non traités"
+
+ 1-GTFS-Common-5: "Contrôle de la présence de données dans les fichiers obligatoires"
+ 1-GTFS-Common-6: "Contrôle de la présence de données dans les fichiers calendar ou calendar_dates"
+ 1-GTFS-Common-7: "Contrôle de la présence de données dans les fichiers optionnels"
+
+ 1-GTFS-Common-8: "Contrôle de l'unicité des identifiants"
+ 1-GTFS-Common-9: "Contrôle de la présence des colonnes obligatoires"
+ 1-GTFS-Common-10: "Contrôle de la présence des colonnes qui devraient être obligatoires "
+ 1-GTFS-Common-11: "Contrôle de la présence de colonnes non traités"
+
+ 1-GTFS-Common-12: "Contrôle de la présence des données obligatoires"
+ 1-GTFS-Common-13: "Contrôle de la présence de la colonne agency_id si plusieurs agences sont définies"
+ 1-GTFS-Common-14: "Contrôle de la présence de la colonne agency_id même si une seule agence est définie"
+ 1-GTFS-Common-15: "Contrôle de la présence d'une donnée sur valeur d'une autre"
+
+ 1-GTFS-Common-16: "Contrôle du type des données"
+
+ 1-GTFS-Route-1: "Contrôle de la présence des colonnes obligatoires conditionnelles"
+ 1-GTFS-Route-2: "Contrôle de la présence de données dans route_long_name ou route_short_name"
+
+ 1-GTFS-Calendar-1: "Contrôle de la présence d'au moins un jour d'application "
+ 1-GTFS-Calendar-2: "Contrôle de la chronologie des dates de début et fin de période"
+
+ 2-GTFS-Common-1: "Contrôle de la présence des objets référencés"
+ 2-GTFS-Common-2: "Contrôle de l'utilité des objets"
+ 2-GTFS-Common-3: "Contrôle de l'unicité d'un couple de données"
+ 2-GTFS-Common-4: "Contrôle de la non redondance de valeurs"
+ 2-GTFS-Stop-1: "Contrôle du type du parent_station"
+ 2-GTFS-Stop-2: "Contrôle de l'utilité de la colonne location_type"
+ 2-GTFS-Stop-3: "Contrôle de l'unicité de désignation (stop_name,stop_desc)"
+ 2-GTFS-Stop-4: "Contrôle de la non présence de station dans des stations"
+ 2-GTFS-Route-1: "Contrôle de la différence entre route_short_name et route_long_name"
+ 2-GTFS-Route-2: "Contrôle de la non inclusion de route_short_name dans route_long_name"
+ 2-GTFS-Route-3: "Contrôle du contraste des couleurs"
+ 2-GTFS-Route-4: "Contrôle de la non présence d'une route inversant les valeurs route_short_name et route_long_name d'une autre"
+
+ ## COMMON
+ 3-StopArea-1: "Vérification de la géolocalisation de tous les arrêts hors ITL"
+ 3-StopArea-2: "Vérification que 2 arrêts de noms différents en dehors d'un même regroupement d'arrêts ne sont pas trop proches"
+ 3-StopArea-3: "Vérification de l'unicité des arrêts"
+ 3-StopArea-4: "Vérification de la géolocalisation des arrêts"
+ 3-StopArea-5: "Vérification de la position relative des arrêts et de leur parent"
+ 3-AccessPoint-1: "Vérification de la géolocalisation de tous les accès"
+ 3-AccessPoint-2: "Vérification que deux accès de nom différents ne sont pas trop proches"
+ 3-AccessPoint-3: "Vérification de la proximité entre les accès et leur arrêt de rattachement"
+ 3-ConnectionLink-1: "Vérification de la proximité entre les deux arrêts d'une correspondance"
+ 3-ConnectionLink-2: "Vérification de la cohérence entre la distance fournie sur la correspondance et la distance géographique entre les deux arrêts de la correspondance"
+ 3-ConnectionLink-3: "Vérification de la vitesse de parcours entre les deux arrêts d'une correspondance"
+ 3-AccessLink-1: "Vérification de la proximité entre les deux extrémités d'un lien d'accès"
+ 3-AccessLink-2: "Vérification de la cohérence entre la distance fournie sur le lien d'accès et la distance géographique entre les deux extrémités du lien d'accès"
+ 3-AccessLink-3: "Vérification de la vitesse de parcours entre les deux extrémités d'un lien d'accès"
+ 3-Line-1: "Vérification de la non homonymie des lignes"
+ 3-Line-2: "Vérification de la présence de séquences d'arrêts sur la ligne"
+ 3-Route-1: "Vérification de la succession des arrêts de la séquence"
+ 3-Route-2: "Vérification de la séquence inverse"
+ 3-Route-3: "Vérification de la distance entre deux arrêts successifs de la séquence"
+ 3-Route-4: "Vérification de double définition de séquences"
+ 3-Route-5: "Vérification de séquences sans séquence opposée"
+ 3-Route-6: "Vérification de la présence d'arrêts dans la séquence"
+ 3-Route-7: "Vérification de la présence de missions"
+ 3-Route-8: "Vérification de l'utilisation des arrêts par les missions"
+ 3-Route-9: "Vérification de l’existence d’une mission passant par tous les arrêts de la séquence"
+ 3-JourneyPattern-1: "Vérification de double définition de missions"
+ 3-VehicleJourney-1: "Vérification de la chronologie des horaires de passage à un arrêt"
+ 3-VehicleJourney-2: "Vérification de la vitesse de transfert entre deux arrêts"
+ 3-VehicleJourney-3: "Vérification de la cohérence des courses successives desservant deux mêmes arrêts"
+ 3-VehicleJourney-4: "Vérification de l'affectation des courses à un calendrier"
+ 3-Facility-1: "Vérification de la géolocalisation de tous les accès"
+ 3-Facility-2: "Vérification de la proximité entre les équipements et leur arrêt de rattachement"
+ 4-Network-1: "Vérification de contraintes sur les attributs des réseaux"
+ 4-Company-1: "Vérification de contraintes sur les attributs des transporteurs"
+ 4-GroupOfLine-1: "Vérification de contraintes sur les attributs des groupes de lignes"
+ 4-StopArea-1: "Vérification de contraintes sur les attributs des arrêts"
+ 4-StopArea-2: "Vérification de l'existance d'un arrêt commercial pour les arrêts physiques"
+ 4-StopArea-3: "Vérification de la cohérence entre les noms de communes et leur code INSEE"
+ 4-AccessPoint-1: "Vérification de contraintes sur les attributs des accès"
+ 4-AccessLink-1: "Vérification de contraintes sur les attributs des liens d'accès"
+ 4-ConnectionLink-1: "Vérification de contraintes sur les attributs des correspondances"
+ 4-ConnectionLink-2: "Vérification des type d'arrêts en correspondance"
+ 4-Timetable-1: "Vérification de contraintes sur les attributs des calendiers"
+ 4-Line-1: "Vérification de contraintes sur les attributs des lignes"
+ 4-Line-2: "Vérification des modes de transport des lignes"
+ 4-Line-3: "Vérification des groupes de lignes d'une ligne"
+ 4-Line-4: "Vérification des séquences d'arrêts d'une ligne"
+ 4-Route-1: "Vérification de contraintes sur les attributs des séquences d'arrêt"
+ 4-JourneyPattern-1: "Vérification de contraintes sur les attributs des missions"
+ 4-VehicleJourney-1: "Vérification de contraintes sur les attributs des courses"
+ 4-VehicleJourney-2: "Vérification des modes de transport des courses"
+ severity: "Severity"
+ status: "Status"
+ rule_level: "Level"
+ rule_target: "Object"
+ rule_number: "Step"
+ rule_code: "Code"
+ violation_count: "errors"
+ violation_count_txt: "Number of errors"
+ objects: "Objects in violations"
+ detail: "Detail"
+ title: "Test title"
+ object: "Error object"
+ resource: "Resources of the error object"
+ url: "URL"
+ first_violations: "First violations"
diff --git a/config/locales/compliance_check_results.yml b/config/locales/compliance_check_results.fr.yml
index acbaa6826..c630e3e83 100644
--- a/config/locales/compliance_check_results.yml
+++ b/config/locales/compliance_check_results.fr.yml
@@ -1,348 +1,3 @@
-en:
- compliance_check_results:
- errors: 'Errors'
- file:
- zip_name_prefix: "compliance_check_results"
- summary_errors_file_prefix: "summary_of_tests.csv"
- detailed_errors_file_prefix: "detail_of_errors.csv"
- index:
- line: "Li"
- column: "Col"
- compliance_check_result:
- severities:
- error: "Required"
- warning: "Optional"
- error_txt: "Required"
- warning_txt: "Optional"
- statuses:
- nok: "Error"
- uncheck: "Unavailable"
- ok: "Success"
- details:
- #### level 1
- ## NEPTUNE
- detail_1_neptune_xml_1: "%{source_label} : %{error_value}"
- detail_1_neptune_xml_2: "%{source_label} : %{error_value}"
- #### level 2
- ## NEPTUNE
- detail_2_neptune_common_1: "L'élément %{source_objectid} a des attributs qui diffèrent entre les différents fichiers qui le définissent"
- detail_2_neptune_common_2: "L'élément %{source_objectid} partage l'attribut RegistrationNumber = %{error_value} avec un autre objet de même type"
- detail_2_neptune_network_1: "La ligne %{source_objectid} est absente de la liste des lignes du réseau %{target_0_objectid}"
- detail_2_neptune_groupofline_1: "La ligne %{source_objectid} est absente de la liste des lignes du du groupe de lignes %{target_0_objectid}"
- detail_2_neptune_stoparea_1: "Le fils (contains = %{error_value}) de l'arrêt %{source_objectid} n'est pas de type StopArea ni StopPoint"
- detail_2_neptune_stoparea_2: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type StopPlace ou CommercialStopPoint, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
- detail_2_neptune_stoparea_3: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type BoardingPosition ou Quay, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
- detail_2_neptune_stoparea_4: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des points d'arrêt de séquence, or un des arrêts contenus (contains = %{target_0_objectid}) est un StopArea arrêt de type %{error_value}"
- detail_2_neptune_stoparea_5: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{error_value}) inexistante"
- detail_2_neptune_stoparea_6: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{target_0_objectid}) qui ne le référence pas en retour (containedIn = %{error_value})"
- detail_2_neptune_itl_1: "Le fils (contains = %{target_0_objectid}) de type %{error_value} ne peut pas être contenu dans l'arrêt %{source_objectid} de type %{reference_value}"
- detail_2_neptune_itl_2: "L'arrêt de type ITL %{source_objectid} n'est pas utilisé"
- detail_2_neptune_itl_3: "L'arrêt areaId = %{error_value} référencé par l'ITL %{source_objectid} n'existe pas"
- detail_2_neptune_itl_4: "L'arrêt areaId = %{target_0_objectid} référencé par l'ITL %{source_objectid} devrait être de type ITL et non de type %{error_value}"
- detail_2_neptune_itl_5: "La référence lineIdShortCut = %{error_value} de l'ITL %{source_objectid} n'est pas cohérente avec la ligne %{target_0_objectid}"
- detail_2_neptune_areacentroid_1: "La position géographique <AreaCentroid> %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
- detail_2_neptune_areacentroid_2: "La position géographique <AreaCentroid> %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- detail_2_neptune_connectionlink_1: "La correspondance %{source_objectid} référence 2 arrêts inexistants"
- detail_2_neptune_accesspoint_1: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{error_value}) inexistant"
- detail_2_neptune_accesspoint_2: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{target_0_objectid}) de type invalide (ITL)"
- detail_2_neptune_accesspoint_3: "L'accès %{source_objectid} n'a pas de lien d'accès"
- detail_2_neptune_accesspoint_4: "L'accès %{source_objectid} de type In a des liens d'accès sortants"
- detail_2_neptune_accesspoint_5: "L'accès %{source_objectid} de type Out a des liens d'accès entrants"
- detail_2_neptune_accesspoint_6: "L'accès %{source_objectid} de type InOut n'a que des liens d'accès entrants ou sortants"
- detail_2_neptune_accesspoint_7: "L'accès %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- detail_2_neptune_accesslink_1: "La liaison d'accès %{source_objectid} référence %{error_value} qui n'existe pas"
- detail_2_neptune_accesslink_2: "Sur la liaison d'accès %{source_objectid}, les références startOfLink = %{error_value} et endOfLink = %{reference_value} sont de même type"
- detail_2_neptune_line_1: "La ligne %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value} inexistant"
- detail_2_neptune_line_2: "La ligne %{source_objectid} référence un point d'arrêt <StopPoint> (lineEnd = %{error_value}) inexistant "
- detail_2_neptune_line_3: "La ligne %{source_objectid} référence un point d'arrêt (lineEnd = %{error_value}) qui n'est pas terminus d'une séquence d'arrêts"
- detail_2_neptune_line_4: "La ligne %{source_objectid} référence une séquence d'arrêt (routeId = %{error_value}) inexistante"
- detail_2_neptune_line_5: "La séquence d'arrêts (routeId = %{target_0_objectid}) n'est pas référencée par la ligne %{source_objectid}"
- detail_2_neptune_route_1: "La séquence d'arrêts %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
- detail_2_neptune_route_2: "La séquence d'arrêts %{source_objectid} référence un tronçon (ptLinkId = %{error_value}) inexistant"
- detail_2_neptune_route_3: "La séquence retour (waybackRouteId = %{error_value}) de la séquence d'arrêts %{source_objectid} n'existe pas"
- detail_2_neptune_route_4: "Le tronçon (ptLinkId = %{error_value}) référencé par la séquence d'arrêt %{source_objectid} est partagé avec %{target_0_objectid}"
- detail_2_neptune_route_5: "Le tronçon %{source_objectid} partage un %{reference_value} : %{error_value} avec un autre tronçon"
- detail_2_neptune_route_6_1: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons forme un anneau"
- detail_2_neptune_route_6_2: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons est rompu au tronçon %{target_0_objectid}"
- detail_2_neptune_route_7: "La séquence d'arrêts %{source_objectid} ne référence pas la mission %{target_0_objectid} alors que cette mission référence la séquence d'arrêt"
- detail_2_neptune_route_8: "La mission journeyPatternId = %{target_0_objectid} de la séquence d'arrêts %{source_objectid} utilise des points d'arrêts hors séquence"
- detail_2_neptune_route_9: "Le point d'arrêt (stopPointId = %{target_0_objectid}) de la séquence d'arrêts %{source_objectid} n'est utilisé dans aucune mission"
- detail_2_neptune_route_10: "La séquence retour (waybackRouteId = %{target_0_objectid}) ne référence pas la séquence d'arrêts %{source_objectid} comme retour"
- detail_2_neptune_route_11: "Le sens (%{reference_value}) de la séquence d'arrêt %{source_objectid} n'est pas compatible avec celui (%{error_value}) de la séquence opposée %{target_0_objectid}"
- detail_2_neptune_route_12: "Le départ dans la zone %{reference_value}) de la séquence d'arrêts %{source_objectid} n'est pas dans la même zone que l'arrivée (zone %{error_value} de la séquence retour %{target_0_objectid}"
- detail_2_neptune_ptlink_1: "Le tronçon %{source_objectid} reférence un %{reference_value} = %{error_value} inexistant"
- detail_2_neptune_journeypattern_1: "La mission %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
- detail_2_neptune_journeypattern_2: "La mission %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value}) inexistant"
- detail_2_neptune_journeypattern_3: "La mission %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
- detail_2_neptune_stoppoint_1: "Le point d'arrêt %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
- detail_2_neptune_stoppoint_2: "Le point d'arrêt %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value}) inexistant"
- detail_2_neptune_stoppoint_3: "Le point d'arrêt %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
- detail_2_neptune_stoppoint_4: "Le point d'arrêt %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- detail_2_neptune_timetable_1: "Le calendrier (<Timetable>) %{source_objectid} ne référence aucune course existante"
- detail_2_neptune_timetable_2: "La course %{source_objectid} n'est référencée dans aucun calendrier (<Timetable>)"
- detail_2_neptune_vehiclejourney_1: "La course %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_2: "La course %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_3: "La course %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_4: "La course %{source_objectid} référence un opérateur (operatorId = %{error_value}) inexistant"
- detail_2_neptune_vehiclejourney_5: "La course %{source_objectid} référence une fréquence horaire (timeSlotId = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_6: "La course %{source_objectid} référence une mission %{error_value} incompatible de la séquence d'arrêts %{reference_value}"
- detail_2_neptune_vehiclejourney_7: "La mission %{source_objectid} n'est référencée par aucune course"
- detail_2_neptune_vehiclejourneyatstop_1: "La course %{source_objectid} fournit un horaire sur un point d'arrêt (stopPointId = %{error_value}) inexistant"
- detail_2_neptune_vehiclejourneyatstop_2: "Un horaire de la course %{source_objectid} référence une autre course : vehicleJourneyId = %{error_value}"
- detail_2_neptune_vehiclejourneyatstop_3: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts selon l'ordre de la séquence d'arrêts %{error_value}"
- detail_2_neptune_vehiclejourneyatstop_4: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts de sa mission %{error_value}"
- detail_2_neptune_facility_1: "L'équipement %{source_objectid} est situé sur un arrêt inexistant (containedId = %{error_value})"
- detail_2_neptune_facility_2: "L'équipement %{source_objectid} référence un arrêt (stopAreaId = %{error_value}) inexistant"
- detail_2_neptune_facility_3: "L'équipement %{source_objectid} référence une ligne (lineId = %{error_value} inexistante"
- detail_2_neptune_facility_4: "L'équipement %{source_objectid} référence une correspondance (connectionLinkId = %{error_value} inexistante"
- detail_2_neptune_facility_5: "L'équipement %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value} inexistant"
- detail_2_neptune_facility_6: "L'équipement %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- #### level 3
- detail_3_stoparea_1: "L'arrêt %{source_label} (%{source_objectid}) n'est pas géolocalisé"
- detail_3_stoparea_2: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop près de l'arrêt %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
- detail_3_stoparea_3: "Les arrêts %{source_label} (%{source_objectid} et %{target_0_objectid}) sont desservis par les mêmes lignes"
- detail_3_stoparea_4: "L'arrêt %{source_label} (%{source_objectid}) est en dehors du périmètre de contrôle"
- detail_3_stoparea_5: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
- detail_3_accesspoint_1: "L'accès %{source_label} (%{source_objectid}) n'est pas géolocalisé"
- detail_3_accesspoint_2: "L'accès %{source_label} (%{source_objectid}) est localisé trop près de l'accès %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
- detail_3_accesspoint_3: "L'accès %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
- detail_3_connectionlink_1: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
- detail_3_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
- detail_3_connectionlink_3_1: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_connectionlink_3_2: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_connectionlink_3_3: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_connectionlink_3_4: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
- detail_3_accesslink_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
- detail_3_accesslink_3_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_3_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_3_3: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_3_4: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_line_1: "La ligne %{source_label} (%{source_objectid}) a une ligne homonyme sur le même réseau %{target_0_label} (%{target_0_objectid})"
- detail_3_line_2: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
- detail_3_route_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), l'arrêt %{target_0_label} (%{target_0_objectid}) est desservi 2 fois consécutivement"
- detail_3_route_2: "Les terminus de la séquence d'arrêt %{source_label} (%{source_objectid}) ne sont pas cohérent avec ceux de sa séquence opposée : l'une part de %{target_0_label} (%{target_0_objectid}) et l'autre arrive à %{target_1_label} (%{target_1_objectid})"
- detail_3_route_3_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} < %{reference_value} "
- detail_3_route_3_2: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} > %{reference_value} "
- detail_3_route_4: "La séquence d'arrêt %{source_label} (%{source_objectid}) utilise la même liste ordonnée d'arrêts que la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
- detail_3_route_5: "La séquence d'arrêt %{source_label} (%{source_objectid}) peut admettre la séquence %{target_0_label} (%{target_0_objectid}) comme séquence opposée"
- detail_3_route_6: "La séquence d'arrêt %{source_label} (%{source_objectid}) doit avoir un minimum de 2 arrêts"
- detail_3_route_7: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission"
- detail_3_route_8: "La séquence d'arrêt %{source_label} (%{source_objectid}) a %{error_value} arrêts non utilisés par des missions"
- detail_3_route_9: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission desservant l'ensemble de ses arrêts"
- detail_3_journeypattern_1: "La mission %{source_label} (%{source_objectid}) utilise les mêmes arrêts que la mission %{target_0_label} (%{target_0_objectid}) - nombre d'arrêts = %{error_value}"
- detail_3_vehiclejourney_1: "Arrêt %{target_0_label} (%{target_0_objectid}) : durée d'arrêt mesurée %{error_value} > %{reference_value}"
- detail_3_vehiclejourney_2_1: "La course %{source_label} (%{source_objectid}) a des horaires décroissants entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
- detail_3_vehiclejourney_2_2: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} < %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
- detail_3_vehiclejourney_2_3: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} > %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
- detail_3_vehiclejourney_3: "La course %{source_label} (%{source_objectid}) a une variation de progression entre les arrêts %{target_1_label} (%{target_1_objectid}) et %{target_2_label} (%{target_2_objectid}) %{error_value} > %{reference_value} avec la course %{target_0_label} (%{target_0_objectid})"
- detail_3_vehiclejourney_4: "La course %{source_label} (%{source_objectid}) n'a pas de calendrier d'application"
- detail_3_facility_1: "L'équipement %{source_label} (%{source_objectid}) n'est pas géolocalisé"
- detail_3_facility_2: "L'équipement %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{areaName} (%{areaId}) : distance %{error_value} > %{reference_value}"
-
- detail_4_network_1_min_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value}) "
- detail_4_network_1_max_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_network_1_pattern: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_network_1_unique: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) a une valeur partagée avec le réseau %{target_0_label} (%{target_0_objectid})"
- detail_4_company_1_min_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_company_1_max_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_company_1_pattern: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_company_1_unique: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) a une valeur partagée avec le transporteur %{target_0_label} (%{target_0_objectid})"
- detail_4_groupofline_1_min_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_groupofline_1_max_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_groupofline_1_pattern: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_groupofline_1_unique: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) a une valeur partagée avec le groupe de lignes %{target_0_label} (%{target_0_objectid})"
- detail_4_stoparea_1_min_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_stoparea_1_max_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_stoparea_1_pattern: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_stoparea_1_unique: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) a une valeur partagée avec l'arrêt %{target_0_label} (%{target_0_objectid})"
- detail_4_stoparea_2: "L'arrêt physique %{source_label} (%{source_objectid}) n'a pas de parent"
- detail_4_accesspoint_1_min_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_accesspoint_1_max_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_accesspoint_1_pattern: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_accesspoint_1_unique: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le point d'accès %{target_0_label} (%{target_0_objectid})"
- detail_4_accesslink_1_min_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_accesslink_1_max_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_accesslink_1_pattern: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_accesslink_1_unique: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le lien d'accès %{target_0_label} (%{target_0_objectid})"
- detail_4_connectionlink_1_min_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_connectionlink_1_max_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_connectionlink_1_pattern: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_connectionlink_1_unique: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) a une valeur partagée avec la correspondance %{target_0_label} (%{target_0_objectid})"
- detail_4_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}) au moins l'un des arrêts %{startName} (%{startId}) et %{endName} (%{endId}) n'est pas un arrêt physique"
- detail_4_timetable_1_min_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_timetable_1_max_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_timetable_1_pattern: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_timetable_1_unique: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) a une valeur partagée avec le calendrier %{target_0_label} (%{target_0_objectid})"
- detail_4_line_1_min_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_line_1_max_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_line_1_pattern: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_line_1_unique: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) a une valeur partagée avec la ligne %{target_0_label} (%{target_0_objectid})"
- detail_4_line_2: "La ligne %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
- detail_4_line_3_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de groupe de lignes"
- detail_4_line_3_2: "La ligne %{source_label} (%{source_objectid}) a plusieurs groupes de lignes"
- detail_4_line_4_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
- detail_4_line_4_2: "La ligne %{source_label} (%{source_objectid}) a trop de séquences d'arrêts non associées (%{error_value})"
- detail_4_route_1_min_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_route_1_max_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_route_1_pattern: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_route_1_unique: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) a une valeur partagée avec la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
- detail_4_journeypattern_1_min_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_journeypattern_1_max_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_journeypattern_1_pattern: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_journeypattern_1_unique: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) a une valeur partagée avec la mission %{target_0_label} (%{target_0_objectid})"
- detail_4_vehiclejourney_1_min_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_vehiclejourney_1_max_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_vehiclejourney_1_pattern: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_vehiclejourney_1_unique: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) a une valeur partagée avec la course %{target_0_label} (%{target_0_objectid})"
- detail_4_vehiclejourney_2: "La course %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
- activemodel:
- models:
- compliance_check_result:
- zero: "Validation"
- one: "Validation"
- other: "Validation"
- attributes:
- compliance_check_result:
- 1-NEPTUNE-XML-1: "Conformité à la syntaxe XML suivant les recommandations du W3C."
- 1-NEPTUNE-XML-2: "Conformité au schéma défini par la XSD du profil TRIDENT/NEPTUNE."
- 2-NEPTUNE-Common-1: "Unicité des éléments objectId des différents objets d'un lot de fichiers Neptune."
- 2-NEPTUNE-Common-2: "Unicité des éléments regitrationNumber des différents objets d'un lot de fichiers Neptune."
- 2-NEPTUNE-Network-1: "Correcte référence à des lignes <Line> dans version du réseau <PTNetwork>."
- 2-NEPTUNE-GroupOfLine-1: "Correcte référence à des lignes <Line> dans groupe de lignes <GroupOfLine>."
- 2-NEPTUNE-StopArea-1: "Correcte référence à des arrêts <StopArea> et/ou à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea>."
- 2-NEPTUNE-StopArea-2: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type StopPlace."
- 2-NEPTUNE-StopArea-3: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type CommercialStopPoint."
- 2-NEPTUNE-StopArea-4: "Correcte référence à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea> de type BoardingPosition ou Quay."
- 2-NEPTUNE-StopArea-5: "Correcte référence à une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
- 2-NEPTUNE-StopArea-6: "référenceréciproque d'une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
- 2-NEPTUNE-ITL-1: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type ITL."
- 2-NEPTUNE-ITL-2: "Correcte référence à des arrêts <StopArea> de type ITL dans la classe d’objets <ITL>."
- 2-NEPTUNE-ITL-3: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <ITL>."
- 2-NEPTUNE-ITL-4: "Vérification du type de référence à des arrêts <StopArea> type ITL dans la classe d’objets <ITL>."
- 2-NEPTUNE-ITL-5: "Bonne référence à la ligne <Line> dans la classe d’objets <ITL>."
- 2-NEPTUNE-AreaCentroid-1: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <AreaCentroid>."
- 2-NEPTUNE-AreaCentroid-2: "Vérification du modèle de projection de référence utilisé."
- 2-NEPTUNE-ConnectionLink-1: "Correcte référence aux arrêts <StopArea> définissant des tronçons de correspondance <ConnectionLink>."
- 2-NEPTUNE-AccessPoint-1: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
- 2-NEPTUNE-AccessPoint-2: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
- 2-NEPTUNE-AccessPoint-3: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint>."
- 2-NEPTUNE-AccessPoint-4: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> de type 'in'."
- 2-NEPTUNE-AccessPoint-5: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'out'."
- 2-NEPTUNE-AccessPoint-6: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'inout'."
- 2-NEPTUNE-AccessPoint-7: "Vérification du modèle de projection de référence utilisé."
- 2-NEPTUNE-AccessLink-1: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
- 2-NEPTUNE-AccessLink-2: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
- 2-NEPTUNE-Line-1: "Correcte référence au réseau dans l'objet ligne <Line>."
- 2-NEPTUNE-Line-2: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
- 2-NEPTUNE-Line-3: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
- 2-NEPTUNE-Line-4: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
- 2-NEPTUNE-Line-5: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
- 2-NEPTUNE-Route-1: "Existence des missions <JourneyPattern> référencées par la séquence d'arrêt <ChouetteRoute>."
- 2-NEPTUNE-Route-2: "Existence des tronçons commerciaux <PtLink> référencés par la séquence d'arrêt <ChouetteRoute>."
- 2-NEPTUNE-Route-3: "Existence de la séquence opposée <ChouetteRoute> référencée par la séquence d'arrêt <ChouetteRoute>."
- 2-NEPTUNE-Route-4: "Correcte référence à un tronçon commercial <PtLink> dans une séquence d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-5: "Vérification que tous les points d'arrêts sur parcours sont rattachés à une séquence d'arrêts <ChouetteRoute> au départ d'un tronçon commercial <PtLink> et/ou à l'arrivée d'un autre tronçon commercial <PtLink> de la même séquence d'arrêts."
- 2-NEPTUNE-Route-6: "Vérification du correct ordonnancement des points d'arrêts sur parcours <StopPoint> dans le chainage des tronçons <PtLink> d'une séquence d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-7: "référence mutuelle des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-8: "Cohérence des références aux points d'arrêt des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-9: "Utilité des points d'arrêts sur parcours des séquences d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-10: "référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
- 2-NEPTUNE-Route-11: "Cohérence des sens de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
- 2-NEPTUNE-Route-12: "Cohérence des terminus de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
- 2-NEPTUNE-PtLink-1: "Existence des arrêts <StopPoint> référencés par les tronçons commerciaux <PTLink>."
- 2-NEPTUNE-JourneyPattern-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la mission <JourneyPattern>."
- 2-NEPTUNE-JourneyPattern-2: "Existence des arrêts <StopPoint> référencés par la mission <JourneyPattern>."
- 2-NEPTUNE-JourneyPattern-3: "Existence de la ligne <Line> référencée par la mission <JourneyPattern>."
- 2-NEPTUNE-StopPoint-1: "Existence de la ligne <Line> référencée par l'arrêt <StopPoint>."
- 2-NEPTUNE-StopPoint-2: "Existence du réseau <PTNetwork> référence par l'arrêt <StopPoint>."
- 2-NEPTUNE-StopPoint-3: "Existence de l'arrêt <StopArea> référencé par l'arrêt <StopPoint>."
- 2-NEPTUNE-StopPoint-4: "Vérification du modèle de projection de référence utilisé."
- 2-NEPTUNE-Timetable-1: "Utilité des calendriers."
- 2-NEPTUNE-Timetable-2: "Utilité des calendriers."
- 2-NEPTUNE-VehicleJourney-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-2: "Existence de la mission <JourneyPattern> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-3: "Existence de la ligne <Line> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-4: "Existence de l'opérateur <Company> référencé par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-5: "Existence de la tranche horaire <TimeSlot> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-6: "Cohérence entre la course, la mission et la séquence d'arrêts."
- 2-NEPTUNE-VehicleJourney-7: "Utilité des missions"
- 2-NEPTUNE-VehicleJourneyAtStop-1: "Existence de l'arrêt <StopPoint> référencé par l'horaire <VehicleJourneyAtStop>."
- 2-NEPTUNE-VehicleJourneyAtStop-2: "Existence de la course <VehicleJourney> référenceé par l'horaire <VehicleJourneyAtStop>."
- 2-NEPTUNE-VehicleJourneyAtStop-3: "adéquation des horaires de la course à la séquence d'arrêts."
- 2-NEPTUNE-VehicleJourneyAtStop-4: "adéquation des horaires de la course à la mission."
- 2-NEPTUNE-Facility-1: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
- 2-NEPTUNE-Facility-2: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
- 2-NEPTUNE-Facility-3: "Existence de la ligne <Line> référencée par l'équipement <Facility>."
- 2-NEPTUNE-Facility-4: "Existence de la correspondance <ConnectionLink> référencée par l'équipement <Facility>."
- 2-NEPTUNE-Facility-5: "Existence de l'arrêt <StopPoint> référencé par l'équipement <Facility>."
- 2-NEPTUNE-Facility-6: "Vérification du modèle de projection de référence utilisé."
- 3-StopArea-1: "Vérification de la géolocalisation de tous les arrêts hors ITL"
- 3-StopArea-2: "Vérification que 2 arrêts de noms différents en dehors d'un même regroupement d'arrêts ne sont pas trop proches"
- 3-StopArea-3: "Vérification de l'unicité des arrêts"
- 3-StopArea-4: "Vérification de la géolocalisation des arrêts"
- 3-StopArea-5: "Vérification de la position relative des arrêts et de leur parent"
- 3-AccessPoint-1: "Vérification de la géolocalisation de tous les accès"
- 3-AccessPoint-2: "Vérification que deux accès de nom différents ne sont pas trop proches"
- 3-AccessPoint-3: "Vérification de la proximité entre les accès et leur arrêt de rattachement"
- 3-ConnectionLink-1: "Vérification de la proximité entre les deux arrêts d'une correspondance"
- 3-ConnectionLink-2: "Vérification de la cohérence entre la distance fournie sur la correspondance et la distance géographique entre les deux arrêts de la correspondance"
- 3-ConnectionLink-3: "Vérification de la vitesse de parcours entre les deux arrêts d'une correspondance"
- 3-AccessLink-1: "Vérification de la proximité entre les deux extrémités d'un lien d'accès"
- 3-AccessLink-2: "Vérification de la cohérence entre la distance fournie sur le lien d'accès et la distance géographique entre les deux extrémités du lien d'accès"
- 3-AccessLink-3: "Vérification de la vitesse de parcours entre les deux extrémités d'un lien d'accès"
- 3-Line-1: "Vérification de la non homonymie des lignes"
- 3-Line-2: "Vérification de la présence de séquences d'arrêts sur la ligne"
- 3-Route-1: "Vérification de la succession des arrêts de la séquence"
- 3-Route-2: "Vérification de la séquence inverse"
- 3-Route-3: "Vérification de la distance entre deux arrêts successifs de la séquence"
- 3-Route-4: "Vérification de double définition de séquences"
- 3-Route-5: "Vérification de séquences sans séquence opposée"
- 3-Route-6: "Vérification de la présence d'arrêts dans la séquence"
- 3-Route-7: "Vérification de la présence de missions"
- 3-Route-8: "Vérification de l'utilisation des arrêts par les missions"
- 3-Route-9: "Vérification de l’existence d’une mission passant par tous les arrêts de la séquence"
- 3-JourneyPattern-1: "Vérification de double définition de missions"
- 3-VehicleJourney-1: "Vérification de la chronologie des horaires de passage à un arrêt"
- 3-VehicleJourney-2: "Vérification de la vitesse de transfert entre deux arrêts"
- 3-VehicleJourney-3: "Vérification de la cohérence des courses successives desservant deux mêmes arrêts"
- 3-VehicleJourney-4: "Vérification de l'affectation des courses à un calendrier"
- 3-Facility-1: "Vérification de la géolocalisation de tous les accès"
- 3-Facility-2: "Vérification de la proximité entre les équipements et leur arrêt de rattachement"
- 4-Network-1: "Vérification de contraintes sur les attributs des réseaux"
- 4-Company-1: "Vérification de contraintes sur les attributs des transporteurs"
- 4-GroupOfLine-1: "Vérification de contraintes sur les attributs des groupes de lignes"
- 4-StopArea-1: "Vérification de contraintes sur les attributs des arrêts"
- 4-StopArea-2: "Vérification de l'existance d'un arrêt commercial pour les arrêts physiques"
- 4-StopArea-3: "Vérification de la cohérence entre les noms de communes et leur code INSEE"
- 4-AccessPoint-1: "Vérification de contraintes sur les attributs des accès"
- 4-AccessLink-1: "Vérification de contraintes sur les attributs des liens d'accès"
- 4-ConnectionLink-1: "Vérification de contraintes sur les attributs des correspondances"
- 4-ConnectionLink-2: "Vérification des type d'arrêts en correspondance"
- 4-Timetable-1: "Vérification de contraintes sur les attributs des calendiers"
- 4-Line-1: "Vérification de contraintes sur les attributs des lignes"
- 4-Line-2: "Vérification des modes de transport des lignes"
- 4-Line-3: "Vérification des groupes de lignes d'une ligne"
- 4-Line-4: "Vérification des séquences d'arrêts d'une ligne"
- 4-Route-1: "Vérification de contraintes sur les attributs des séquences d'arrêt"
- 4-JourneyPattern-1: "Vérification de contraintes sur les attributs des missions"
- 4-VehicleJourney-1: "Vérification de contraintes sur les attributs des courses"
- 4-VehicleJourney-2: "Vérification des modes de transport des courses"
- severity: "Severity"
- status: "Status"
- rule_level: "Level"
- rule_target: "Object"
- rule_number: "Step"
- rule_code: "Code"
- violation_count: "errors"
- violation_count_txt: "Number of errors"
- objects: "Objects in violations"
- detail: "Detail"
- title: "Test title"
- object: "Error object"
- resource: "Resources of the error object"
- url: "URL"
- first_violations: "First violations"
fr:
compliance_check_results:
errors: 'Erreurs'
@@ -353,6 +8,7 @@ fr:
index:
line: "Li"
column: "Col"
+ in_progress: "Validation en cours..."
compliance_check_result:
severities:
error: "Obligatoires"
@@ -368,11 +24,47 @@ fr:
## NEPTUNE
detail_1_neptune_xml_1: "%{source_label} : %{error_value}"
detail_1_neptune_xml_2: "%{source_label} : %{error_value}"
+
+ ## GTFS
+ detail_1_gtfs_csv_1: "le fichier %{filename} est inexploitable"
+ detail_1_gtfs_csv_2: "le fichier %{filename} est inexploitable"
+ detail_1_gtfs_csv_3: "le fichier %{filename} contient un entête vide"
+ detail_1_gtfs_csv_4: "le fichier %{filename} contient des entêtes en double"
+ detail_1_gtfs_csv_5: "la ligne du fichier %{filename} ne respecte pas la syntaxe CSV"
+ detail_1_gtfs_csv_6: "le fichier %{filename} contient des balises HTML"
+ detail_1_gtfs_csv_7: "la valeur '%{error_value}' du champ %{reference_value} contient des espaces aux extrémités"
+
+ detail_1_gtfs_common_1: "le fichier %{filename} est obligatoire"
+ detail_1_gtfs_common_2: "l'un des fichiers calendar.txt ou calendar_dates.txt est obligatoire"
+ detail_1_gtfs_common_3: "le fichier %{filename} optionnel n'est pas présent"
+ detail_1_gtfs_common_4: "le fichier %{filename} n'est pas traité"
+ detail_1_gtfs_common_5: "le fichier %{filename} obligatoire doit définir au moins une entrée"
+ detail_1_gtfs_common_6: "l'un des deux fichiers calendar.txt ou calendar_dates.txt doit définir au moins une entrée"
+ detail_1_gtfs_common_7: "le fichier %{filename} optionnel ne contient aucune entrée"
+ detail_1_gtfs_common_8: "la valeur %{error_value} est définie plusieurs fois pour la colonne %{reference_value}"
+ detail_1_gtfs_common_9: "la colonne %{error_value} est obligatoire"
+ detail_1_gtfs_common_10: "la colonne agency_id devrait être présente dans le fichier %{filename}"
+ detail_1_gtfs_common_11: "la colonne %{error_value} n'est pas exploitée dans le fichier %{filename}"
+ detail_1_gtfs_common_12: "la valeur de la colonne %{error_value} n'est pas renseignée"
+ detail_1_gtfs_common_13: "la colonne agency_id doit être présente dans le fichier %{filename}"
+ detail_1_gtfs_common_14: "la colonne agency_id est absente dans le fichier %{filename}"
+ detail_1_gtfs_common_15_1: "la valeur arrival_time est obligatoire en présence d'une valeur pour departure_time"
+ detail_1_gtfs_common_15_2: "la valeur departure_time est obligatoire en présence d'une valeur pour arrival_time"
+ detail_1_gtfs_common_15_3: "la valeur min_transfer_time est obligatoire quand transfer_type=2"
+ detail_1_gtfs_common_16: "la valeur %{error_value} n'est pas autorisée pour le champs %{reference_value} "
+
+ detail_1_gtfs_route_1: "les champs route_long_name et route_short_name ne sont pas définies"
+ detail_1_gtfs_route_2: "les valeurs des champs route_long_name et route_short_name ne sont pas renseignées"
+
+ detail_1_gtfs_calendar_1: "aucun jour d'application n'est activé"
+ detail_1_gtfs_calendar_2: "la date de fin du calendrier est antérieur ou égale à la date début"
+
#### level 2
## NEPTUNE
detail_2_neptune_common_1: "L'élément %{source_objectid} a des attributs qui diffèrent entre les différents fichiers qui le définissent"
detail_2_neptune_common_2: "L'élément %{source_objectid} partage l'attribut RegistrationNumber = %{error_value} avec un autre objet de même type"
detail_2_neptune_network_1: "La ligne %{source_objectid} est absente de la liste des lignes du réseau %{target_0_objectid}"
+ detail_2_neptune_network_2: "Le réseau %{source_objectid} a un type de source non validee : %{error_value}, remplacé par %{reference_value}"
detail_2_neptune_groupofline_1: "La ligne %{source_objectid} est absente de la liste des lignes du du groupe de lignes %{target_0_objectid}"
detail_2_neptune_stoparea_1: "Le fils (contains = %{error_value}) de l'arrêt %{source_objectid} n'est pas de type StopArea ni StopPoint"
detail_2_neptune_stoparea_2: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type StopPlace ou CommercialStopPoint, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
@@ -402,6 +94,7 @@ fr:
detail_2_neptune_line_3: "La ligne %{source_objectid} référence un point d'arrêt (lineEnd = %{error_value}) qui n'est pas terminus d'une séquence d'arrêts"
detail_2_neptune_line_4: "La ligne %{source_objectid} référence une séquence d'arrêt (routeId = %{error_value}) inexistante"
detail_2_neptune_line_5: "La séquence d'arrêts (routeId = %{target_0_objectid}) n'est pas référencée par la ligne %{source_objectid}"
+ detail_2_neptune_line_6: "La ligne %{source_objectid} ne renseigne aucun des champs name, number ou publishedName"
detail_2_neptune_route_1: "La séquence d'arrêts %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
detail_2_neptune_route_2: "La séquence d'arrêts %{source_objectid} référence un tronçon (ptLinkId = %{error_value}) inexistant"
detail_2_neptune_route_3: "La séquence retour (waybackRouteId = %{error_value}) de la séquence d'arrêts %{source_objectid} n'existe pas"
@@ -425,6 +118,7 @@ fr:
detail_2_neptune_stoppoint_4: "Le point d'arrêt %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
detail_2_neptune_timetable_1: "Le calendrier (<Timetable>) %{source_objectid} ne référence aucune course existante"
detail_2_neptune_timetable_2: "La course %{source_objectid} n'est référencée dans aucun calendrier (<Timetable>)"
+ detail_2_neptune_timetable_3: "Le calendrier (<Timetable>) %{source_objectid} contient une période invalide"
detail_2_neptune_vehiclejourney_1: "La course %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
detail_2_neptune_vehiclejourney_2: "La course %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
detail_2_neptune_vehiclejourney_3: "La course %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
@@ -432,6 +126,7 @@ fr:
detail_2_neptune_vehiclejourney_5: "La course %{source_objectid} référence une fréquence horaire (timeSlotId = %{error_value}) inexistante"
detail_2_neptune_vehiclejourney_6: "La course %{source_objectid} référence une mission %{error_value} incompatible de la séquence d'arrêts %{reference_value}"
detail_2_neptune_vehiclejourney_7: "La mission %{source_objectid} n'est référencée par aucune course"
+ detail_2_neptune_vehiclejourney_8: "La course %{source_objectid} doit référencer une mission si la séquence d'arrêt en possède plusieurs"
detail_2_neptune_vehiclejourneyatstop_1: "La course %{source_objectid} fournit un horaire sur un point d'arrêt (stopPointId = %{error_value}) inexistant"
detail_2_neptune_vehiclejourneyatstop_2: "Un horaire de la course %{source_objectid} référence une autre course : vehicleJourneyId = %{error_value}"
detail_2_neptune_vehiclejourneyatstop_3: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts selon l'ordre de la séquence d'arrêts %{error_value}"
@@ -442,6 +137,20 @@ fr:
detail_2_neptune_facility_4: "L'équipement %{source_objectid} référence une correspondance (connectionLinkId = %{error_value} inexistante"
detail_2_neptune_facility_5: "L'équipement %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value} inexistant"
detail_2_neptune_facility_6: "L'équipement %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ ## GTFS
+ detail_2_gtfs_common_1: "Identifiant %{reference_value} inconnu : %{error_value}"
+ detail_2_gtfs_common_2: "Identifiant %{reference_value} non référencé : %{error_value}"
+ detail_2_gtfs_common_3: "Le couple de champs (%{reference_value}) est en doublon (%{error_value}): "
+ detail_2_gtfs_common_4: "Les valeurs des champs (%{reference_value}) sont identiques : '%{error_value}'"
+ detail_2_gtfs_stop_1: "L'arrêt (%{source_objectid}) ne peut appartenir à un parent de type %{error_value}"
+ detail_2_gtfs_stop_2: "La colonne location_type n'est pas renseignée"
+ detail_2_gtfs_stop_3: "Le nom et la description de l'arrêt (%{source_objectid}) sont identiques : '%{error_value}'"
+ detail_2_gtfs_stop_4: "L'arrêt (%{source_objectid}) de type station ne peut appartenir à une autre station (%{error_value})"
+ detail_2_gtfs_route_1: "La route (%{source_objectid}) a la même valeur (%{error_value}) pour route_short_name et route_long_name"
+ detail_2_gtfs_route_2: "La route (%{source_objectid}) réutilise la valeur de route_short_name (%{error_value}) dans route_long_name (%{reference_value})"
+ detail_2_gtfs_route_3: "les couleurs de la route (%{source_objectid}) ne sont pas contrastées"
+ detail_2_gtfs_route_4: "La route (%{source_objectid}) utilise les valeurs (route_short_name,route_long_name) de la route (%{error_value}) "
+
#### level 3
detail_3_stoparea_1: "L'arrêt %{source_label} (%{source_objectid}) n'est pas géolocalisé"
detail_3_stoparea_2: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop près de l'arrêt %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
@@ -549,11 +258,13 @@ fr:
other: "Validations"
attributes:
compliance_check_result:
+ ## Neptune
1-NEPTUNE-XML-1: "Conformité à la syntaxe XML suivant les recommandations du W3C."
1-NEPTUNE-XML-2: "Conformité au schéma défini par la XSD du profil TRIDENT/NEPTUNE."
2-NEPTUNE-Common-1: "Unicité des éléments objectId des différents objets d'un lot de fichiers Neptune."
2-NEPTUNE-Common-2: "Unicité des éléments regitrationNumber des différents objets d'un lot de fichiers Neptune."
2-NEPTUNE-Network-1: "Correcte référence à des lignes <Line> dans version du réseau <PTNetwork>."
+ 2-NEPTUNE-Network-2: "Valeur autorisée pour le type de source <SourceType> dans version du réseau <PTNetwork>."
2-NEPTUNE-GroupOfLine-1: "Correcte référence à des lignes <Line> dans groupe de lignes <GroupOfLine>."
2-NEPTUNE-StopArea-1: "Correcte référence à des arrêts <StopArea> et/ou à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea>."
2-NEPTUNE-StopArea-2: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type StopPlace."
@@ -583,6 +294,7 @@ fr:
2-NEPTUNE-Line-3: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
2-NEPTUNE-Line-4: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
2-NEPTUNE-Line-5: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
+ 2-NEPTUNE-Line-6: "Présence d'au moins une valeur parmi <name>,<number> ou <publishedName> dans l'objet ligne <Line>."
2-NEPTUNE-Route-1: "Existence des missions <JourneyPattern> référencées par la séquence d'arrêt <ChouetteRoute>."
2-NEPTUNE-Route-2: "Existence des tronçons commerciaux <PtLink> référencés par la séquence d'arrêt <ChouetteRoute>."
2-NEPTUNE-Route-3: "Existence de la séquence opposée <ChouetteRoute> référencée par la séquence d'arrêt <ChouetteRoute>."
@@ -605,6 +317,7 @@ fr:
2-NEPTUNE-StopPoint-4: "Vérification du modèle de projection de référence utilisé."
2-NEPTUNE-Timetable-1: "Utilité des calendriers."
2-NEPTUNE-Timetable-2: "Utilité des calendriers."
+ 2-NEPTUNE-Timetable-3: "Validité des dates de début et de fin des périodes des calendriers"
2-NEPTUNE-VehicleJourney-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la course <VehicleJourney>."
2-NEPTUNE-VehicleJourney-2: "Existence de la mission <JourneyPattern> référencée par la course <VehicleJourney>."
2-NEPTUNE-VehicleJourney-3: "Existence de la ligne <Line> référencée par la course <VehicleJourney>."
@@ -612,6 +325,7 @@ fr:
2-NEPTUNE-VehicleJourney-5: "Existence de la tranche horaire <TimeSlot> référencée par la course <VehicleJourney>."
2-NEPTUNE-VehicleJourney-6: "Cohérence entre la course, la mission et la séquence d'arrêts."
2-NEPTUNE-VehicleJourney-7: "Utilité des missions"
+ 2-NEPTUNE-VehicleJourney-8: "Mission implicite"
2-NEPTUNE-VehicleJourneyAtStop-1: "Existence de l'arrêt <StopPoint> référencé par l'horaire <VehicleJourneyAtStop>."
2-NEPTUNE-VehicleJourneyAtStop-2: "Existence de la course <VehicleJourney> référenceé par l'horaire <VehicleJourneyAtStop>."
2-NEPTUNE-VehicleJourneyAtStop-3: "adéquation des horaires de la course à la séquence d'arrêts."
@@ -622,6 +336,57 @@ fr:
2-NEPTUNE-Facility-4: "Existence de la correspondance <ConnectionLink> référencée par l'équipement <Facility>."
2-NEPTUNE-Facility-5: "Existence de l'arrêt <StopPoint> référencé par l'équipement <Facility>."
2-NEPTUNE-Facility-6: "Vérification du modèle de projection de référence utilisé."
+
+ ## GTFS
+ 1-GTFS-CSV-1: "Contrôle de la lecture du fichier"
+ 1-GTFS-CSV-2: "Contrôle de la syntaxe d'une ligne"
+ 1-GTFS-CSV-3: "Contrôle de la syntaxe des entêtes"
+ 1-GTFS-CSV-4: "Contrôle de la non présence de doublons dans les entêtes"
+ 1-GTFS-CSV-5: "Contrôle de la syntaxe CSV GTFS du fichier"
+ 1-GTFS-CSV-6: "Contrôle de la non présence de balise HTML"
+ 1-GTFS-CSV-7: "Contrôle de la non présence d'espace en début ou fin de colonne"
+
+ 1-GTFS-Common-1: "Contrôle de la présence des fichiers obligatoires"
+ 1-GTFS-Common-2: "Contrôle de la présence des fichiers calendar ou calendar_dates"
+ 1-GTFS-Common-3: "Contrôle de la présence des fichiers optionnels"
+ 1-GTFS-Common-4: "Contrôle de la présence des fichiers non traités"
+
+ 1-GTFS-Common-5: "Contrôle de la présence de données dans les fichiers obligatoires"
+ 1-GTFS-Common-6: "Contrôle de la présence de données dans les fichiers calendar ou calendar_dates"
+ 1-GTFS-Common-7: "Contrôle de la présence de données dans les fichiers optionnels"
+
+ 1-GTFS-Common-8: "Contrôle de l'unicité des identifiants"
+ 1-GTFS-Common-9: "Contrôle de la présence des colonnes obligatoires"
+ 1-GTFS-Common-10: "Contrôle de la présence des colonnes qui devraient être obligatoires "
+ 1-GTFS-Common-11: "Contrôle de la présence de colonnes non traités"
+
+ 1-GTFS-Common-12: "Contrôle de la présence des données obligatoires"
+ 1-GTFS-Common-13: "Contrôle de la présence de la colonne agency_id si plusieurs agences sont définies"
+ 1-GTFS-Common-14: "Contrôle de la présence de la colonne agency_id même si une seule agence est définie"
+ 1-GTFS-Common-15: "Contrôle de la présence d'une donnée sur valeur d'une autre"
+
+ 1-GTFS-Common-16: "Contrôle du type des données"
+
+ 1-GTFS-Route-1: "Contrôle de la présence des colonnes obligatoires conditionnelles"
+ 1-GTFS-Route-2: "Contrôle de la présence de données dans route_long_name ou route_short_name"
+
+ 1-GTFS-Calendar-1: "Contrôle de la présence d'au moins un jour d'application "
+ 1-GTFS-Calendar-2: "Contrôle de la chronologie des dates de début et fin de période"
+
+ 2-GTFS-Common-1: "Contrôle de la présence des objets référencés"
+ 2-GTFS-Common-2: "Contrôle de l'utilité des objets"
+ 2-GTFS-Common-3: "Contrôle de l'unicité d'un couple de données"
+ 2-GTFS-Common-4: "Contrôle de la non redondance de valeurs"
+ 2-GTFS-Stop-1: "Contrôle du type du parent_station"
+ 2-GTFS-Stop-2: "Contrôle de l'utilité de la colonne location_type"
+ 2-GTFS-Stop-3: "Contrôle de l'unicité de désignation (stop_name,stop_desc)"
+ 2-GTFS-Stop-4: "Contrôle de la non présence de station dans des stations"
+ 2-GTFS-Route-1: "Contrôle de la différence entre route_short_name et route_long_name"
+ 2-GTFS-Route-2: "Contrôle de la non inclusion de route_short_name dans route_long_name"
+ 2-GTFS-Route-3: "Contrôle du contraste des couleurs"
+ 2-GTFS-Route-4: "Contrôle de la non présence d'une route inversant les valeurs route_short_name et route_long_name d'une autre"
+
+ ## COMMON
3-StopArea-1: "Vérification de la géolocalisation de tous les arrêts hors ITL"
3-StopArea-2: "Vérification que 2 arrêts de noms différents en dehors d'un même regroupement d'arrêts ne sont pas trop proches"
3-StopArea-3: "Vérification de l'unicité des arrêts"
@@ -688,4 +453,4 @@ fr:
object: "Objet en erreur"
resource: "Ressource de l'objet en erreur"
url: "URL"
- first_violations: "Premières violations"
+ first_violations: "Premières violations"
diff --git a/config/locales/compliance_checks.en.yml b/config/locales/compliance_checks.en.yml
new file mode 100644
index 000000000..85e146c40
--- /dev/null
+++ b/config/locales/compliance_checks.en.yml
@@ -0,0 +1,68 @@
+en:
+ compliance_checks:
+ index:
+ title: "Validation"
+ warning: ""
+ edit:
+ title: "Edit the Validation"
+ show:
+ title: "Neptune Validation"
+ summary: "Rapport de conformité à la norme NEPTUNE"
+ completed: "[ Completed ]"
+ failed: "[ Failed ]"
+ pending: "[ In the treatment queue ]"
+ processing: "[ In progress... ]"
+ export: "Download test report"
+ export_csv: "CSV format"
+ report:
+ validation_success: "Validation successfully passed."
+ actions:
+ destroy_confirm: "Do you confirm to destroy this validation ?"
+ destroy: "Destroy this validation"
+ edit: "Edit this validation"
+ report: "Report"
+ rule_parameter_set: "Rule parameter set"
+ download: "Download"
+ statuses:
+ pending: "Pending"
+ processing: "Processing"
+ completed: "Completed"
+ failed: "Failed"
+ started: "Started"
+ scheduled: "Processing ..."
+ terminated: "Completed"
+ canceled: "Canceled"
+ aborted: "Failed"
+ file_validation_log_messages:
+ messages:
+ undefined: "%{key} undefined"
+ TooMuchDetails: ( %{0} erreurs / warnings supplémentaires )
+ ONE: "Catégorie 1 : Syntaxe"
+ severities:
+ uncheck: "Unchecked"
+ ok: "Ok"
+ warning: "Warning"
+ error: "Error"
+ fatal: "Fatal"
+ import: "Import Report"
+ rule_parameter_set: "Rule Parameter Set"
+ activemodel:
+ models:
+ file_validation:
+ zero: "Validation"
+ one: "Validation"
+ other: "Validation"
+ attributes:
+ file_validation:
+ created_at: "Executed at"
+ references_type: "Associated Data Type"
+ reference_ids: "Associated Data"
+ rule_parameter_set_id: "Rule parameters set"
+ resources: "File to validate"
+ status: "Status"
+ file_name: "Tested data"
+ projection_reference: "Système de projection de référence"
+ file_validation_log_message:
+ created_at: "Date"
+ position: "N."
+ full_message: "Message"
diff --git a/config/locales/compliance_checks.yml b/config/locales/compliance_checks.fr.yml
index b94e66d92..85255d6f1 100644
--- a/config/locales/compliance_checks.yml
+++ b/config/locales/compliance_checks.fr.yml
@@ -1,72 +1,3 @@
-en:
- compliance_checks:
- index:
- title: "Validation"
- warning: ""
- edit:
- title: "Edit the Validation"
- show:
- title: "Neptune Validation"
- summary: "Rapport de conformité à la norme NEPTUNE"
- completed: "[ Completed ]"
- failed: "[ Failed ]"
- pending: "[ In the treatment queue ]"
- processing: "[ In progress... ]"
- export: "Download test report"
- export_csv: "CSV format"
- report:
- validation_success: "Validation successfully passed."
- actions:
- destroy_confirm: "Do you confirm to destroy this validation ?"
- destroy: "Destroy this validation"
- edit: "Edit this validation"
- report: "Report"
- rule_parameter_set: "Rule parameter set"
- download: "Download"
- statuses:
- pending: "Pending"
- processing: "Processing"
- completed: "Completed"
- failed: "Failed"
- started: "Started"
- scheduled: "Processing ..."
- terminated: "Completed"
- canceled: "Canceled"
- aborted: "Failed"
- file_validation_log_messages:
- messages:
- undefined: "%{key} undefined"
- TooMuchDetails: ( %{0} erreurs / warnings supplémentaires )
- ONE: "Catégorie 1 : Syntaxe"
- severities:
- uncheck: "Unchecked"
- ok: "Ok"
- warning: "Warning"
- error: "Error"
- fatal: "Fatal"
- import: "Import Report"
- rule_parameter_set: "Rule Parameter Set"
- activemodel:
- models:
- file_validation:
- zero: "Validation"
- one: "Validation"
- other: "Validation"
- attributes:
- file_validation:
- created_at: "Executed at"
- references_type: "Associated Data Type"
- reference_ids: "Associated Data"
- rule_parameter_set_id: "Rule parameters set"
- resources: "File to validate"
- status: "Status"
- file_name: "Tested data"
- projection_reference: "Système de projection de référence"
- file_validation_log_message:
- created_at: "Date"
- position: "N."
- full_message: "Message"
-
fr:
compliance_checks:
index:
@@ -86,7 +17,7 @@ fr:
export: "Télécharger les résultats"
export_csv: "Format CSV"
report:
- validation_success: "La validation est passé avec succès."
+ validation_success: "La validation est passée avec succès."
action_report: "Rapport d'action"
actions:
destroy_confirm: "Voulez-vous supprimer ce résultat de validation ?"
diff --git a/config/locales/connection_link_types.en.yml b/config/locales/connection_link_types.en.yml
new file mode 100644
index 000000000..a6709e9bc
--- /dev/null
+++ b/config/locales/connection_link_types.en.yml
@@ -0,0 +1,7 @@
+en:
+ connection_link_types:
+ label:
+ undefined: "Undefined"
+ underground: "Underground"
+ mixed: "Mixed"
+ overground: "Overground"
diff --git a/config/locales/connection_link_types.fr.yml b/config/locales/connection_link_types.fr.yml
new file mode 100644
index 000000000..95c8f9a7d
--- /dev/null
+++ b/config/locales/connection_link_types.fr.yml
@@ -0,0 +1,7 @@
+fr:
+ connection_link_types:
+ label:
+ undefined: "Non précisé"
+ underground: "Souterrain"
+ mixed: "Mixte"
+ overground: "Aérien"
diff --git a/config/locales/connection_link_types.yml b/config/locales/connection_link_types.yml
deleted file mode 100644
index 4a7149a4f..000000000
--- a/config/locales/connection_link_types.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-en:
- connection_link_types:
- label:
- undefined: "Undefined"
- underground: "Underground"
- mixed: "Mixed"
- overground: "Overground"
-
-fr:
- connection_link_types:
- label:
- undefined: "Non précisé"
- underground: "Souterrain"
- mixed: "Mixte"
- overground: "Aérien"
diff --git a/config/locales/connection_links.en.yml b/config/locales/connection_links.en.yml
new file mode 100644
index 000000000..914ce0de5
--- /dev/null
+++ b/config/locales/connection_links.en.yml
@@ -0,0 +1,80 @@
+en:
+ connection_links:
+ actions:
+ new: "Add a new connection link"
+ edit: "Edit this connection link"
+ destroy: "Remove this connection link"
+ destroy_confirm: "Are you sure you want destroy this connection link?"
+ select_areas: "Update start/end of link"
+ new:
+ title: "Add a new connection link"
+ edit:
+ title: "Update connection link %{connection_link}"
+ show:
+ title: "Connection link %{connection_link}"
+ durations: "Durations (hh mm ss):"
+ connection_link:
+ from: "From"
+ to: "to"
+ index:
+ title: "Connection links"
+ name: "Search by name"
+ departure: "Start of link"
+ arrival: "End of link"
+ selection: "Selection"
+ selection_all: "All"
+ select_departure:
+ title: "Select start stop area for %{connection_link}"
+ select_arrival:
+ title: "Select end stop area for %{connection_link}"
+ select_areas:
+ title: "Select start and end stops for %{connection_link}"
+ activerecord:
+ models:
+ connection_link:
+ zero: "connection link"
+ one: "connection link"
+ other: "connection links"
+ attributes:
+ connection_link:
+ departure: "Start of link"
+ arrival: "End of link"
+ departure_id: "Start of link"
+ arrival_id: "End of link"
+ undefined: "not yet set"
+ name: "Name"
+ comment: "Comment"
+ link_distance: "Distance (m)"
+ connection_link_type: "Type"
+ default_duration: "Average"
+ frequent_traveller_duration: "Regular passenger"
+ occasional_traveller_duration: "Occasional passenger"
+ mobility_restricted_traveller_duration: "Mobility reduced passenger"
+ mobility_restricted_suitability: "Mobility reduced passenger suitable"
+ stairs_availability: "Escalator"
+ lift_availability: "Lift"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by"
+ formtastic:
+ titles:
+ connection_link:
+ objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ link_distance: ""
+ neptune:
+ connection_link:
+ objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ link_distance: ""
+ netex:
+ connection_link:
+ objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ link_distance: ""
+ gtfs:
+ connection_link:
+ objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ link_distance: ""
+ hub:
+ connection_link:
+ objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ link_distance: "At most 10000.0 meters."
diff --git a/config/locales/connection_links.yml b/config/locales/connection_links.fr.yml
index 790e2973f..07569a89e 100644
--- a/config/locales/connection_links.yml
+++ b/config/locales/connection_links.fr.yml
@@ -1,84 +1,3 @@
-en:
- connection_links:
- actions:
- new: "Add a new connection link"
- edit: "Edit this connection link"
- destroy: "Remove this connection link"
- destroy_confirm: "Are you sure you want destroy this connection link?"
- select_areas: "Update start/end of link"
- new:
- title: "Add a new connection link"
- edit:
- title: "Update connection link %{connection_link}"
- show:
- title: "Connection link %{connection_link}"
- durations: "Durations (hh mm ss):"
- connection_link:
- from: "From"
- to: "to"
- index:
- title: "Connection links"
- name: "Search by name"
- departure: "Start of link"
- arrival: "End of link"
- selection: "Selection"
- selection_all: "All"
- select_departure:
- title: "Select start stop area for %{connection_link}"
- select_arrival:
- title: "Select end stop area for %{connection_link}"
- select_areas:
- title: "Select start and end stops for %{connection_link}"
- activerecord:
- models:
- connection_link:
- zero: "connection link"
- one: "connection link"
- other: "connection links"
- attributes:
- connection_link:
- departure: "Start of link"
- arrival: "End of link"
- departure_id: "Start of link"
- arrival_id: "End of link"
- undefined: "not yet set"
- name: "Name"
- comment: "Comment"
- link_distance: "Distance (m)"
- connection_link_type: "Type"
- default_duration: "Average"
- frequent_traveller_duration: "Regular passenger"
- occasional_traveller_duration: "Occasional passenger"
- mobility_restricted_traveller_duration: "Mobility reduced passenger"
- mobility_restricted_suitability: "Mobility reduced passenger suitable"
- stairs_availability: "Escalator"
- lift_availability: "Lift"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by"
- formtastic:
- titles:
- connection_link:
- objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- link_distance: ""
- neptune:
- connection_link:
- objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- link_distance: ""
- netex:
- connection_link:
- objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- link_distance: ""
- gtfs:
- connection_link:
- objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- link_distance: ""
- hub:
- connection_link:
- objectid: "[prefix]:ConnectionLink:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- link_distance: "At most 10000.0 meters."
-
fr:
connection_links:
actions:
@@ -110,9 +29,9 @@ fr:
title: "Sélection de l'arrêt d'arrivée de %{connection_link}"
select_areas:
title: "Sélection des arrêts de départ et d'arrivée de %{connection_link}"
- activerecord:
- models:
- connection_link:
+ activerecord:
+ models:
+ connection_link:
zero: "correspondance"
one: "correspondance"
other: "correspondances"
@@ -159,4 +78,3 @@ fr:
connection_link:
objectid: "[prefixe]:ConnectionLink:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
link_distance: "Au plus 10000.0 mètres."
-
diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml
index d4cf9c525..25a5bbeba 100644
--- a/config/locales/devise.en.yml
+++ b/config/locales/devise.en.yml
@@ -39,7 +39,7 @@ validating conformance of data wrt Neptune (French standard NFP 99 506)."
sign_in: "Sign in"
sign_up: "Sign up"
new_password: Forget your password ?
- new_confirmation: "Didn't receive confirmation instructions?"
+ new_confirmation: "Confirm my account"
simple_form:
labels:
user:
diff --git a/config/locales/devise.fr.yml b/config/locales/devise.fr.yml
index 5f4b5089a..b909eeaef 100644
--- a/config/locales/devise.fr.yml
+++ b/config/locales/devise.fr.yml
@@ -39,8 +39,8 @@ norme Neptune (NFP 99 506)"
links:
sign_in: "Se connecter"
sign_up: "S'inscrire"
- new_password: "Mot de passe oublié?"
- new_confirmation: "Vous n'avez pas reçu les instructions de confirmation ?"
+ new_password: "Mot de passe oublié ?"
+ new_confirmation: "Confirmer mon compte"
simple_form:
labels:
user:
diff --git a/config/locales/directions.yml b/config/locales/directions.en.yml
index 6e541c274..575ffe90d 100644
--- a/config/locales/directions.yml
+++ b/config/locales/directions.en.yml
@@ -13,19 +13,3 @@ en:
south_east: "south east"
east: "east"
north_east: "north east"
-fr:
- directions:
- label:
- straight_forward: "aller"
- backward: "retour"
- clock_wise: "sens horaire"
- counter_clock_wise: "sens anti horaire"
- north: "nord"
- north_west: "nord ouest"
- west: "ouest"
- south_west: "sud ouest"
- south: "sud"
- south_east: "sud est"
- east: "est"
- north_east: "nord est"
-
diff --git a/config/locales/directions.fr.yml b/config/locales/directions.fr.yml
new file mode 100644
index 000000000..f0526912e
--- /dev/null
+++ b/config/locales/directions.fr.yml
@@ -0,0 +1,15 @@
+fr:
+ directions:
+ label:
+ straight_forward: "aller"
+ backward: "retour"
+ clock_wise: "sens horaire"
+ counter_clock_wise: "sens anti horaire"
+ north: "nord"
+ north_west: "nord ouest"
+ west: "ouest"
+ south_west: "sud ouest"
+ south: "sud"
+ south_east: "sud est"
+ east: "est"
+ north_east: "nord est"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 4ebdcc94c..019e6dc0b 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1,6 +1,7 @@
en:
"true": "Yes"
"false": "No"
+ "unknown": "Unknown"
time:
formats:
hour: "%Hh%M"
diff --git a/config/locales/enumerize.en.yml b/config/locales/enumerize.en.yml
index 1ccf4bb8a..99e2edb75 100644
--- a/config/locales/enumerize.en.yml
+++ b/config/locales/enumerize.en.yml
@@ -20,7 +20,7 @@ en:
line: "Lines"
company: "Companies"
group_of_line: "Group of lines"
- stop_area: "Stop areas"
+ stop_area: "Stops and connections (stops.txt and transfers.txt)"
data_format:
neptune: "Neptune profile"
gtfs: "GTFS"
diff --git a/config/locales/enumerize.fr.yml b/config/locales/enumerize.fr.yml
index f3b0ef0ef..4bfd71d28 100644
--- a/config/locales/enumerize.fr.yml
+++ b/config/locales/enumerize.fr.yml
@@ -20,7 +20,7 @@ fr:
line: "Lignes"
company: "Transporteurs"
group_of_line: "Groupe de lignes"
- stop_area: "Arrêts"
+ stop_area: "Arrêts et correspondances (stops.txt et transfers.txt)"
data_format:
neptune: "Profil Neptune"
gtfs: "GTFS"
@@ -32,4 +32,4 @@ fr:
gtfs: "General Transit Feed Specification défini par Google"
netex: "Expérimental"
hub: "Format spécifique Transdev"
- kml: "Tracés de lignes, séquences d'arrêts, ... en 'Keyhole Markup Language'" \ No newline at end of file
+ kml: "Tracés de lignes, séquences d'arrêts, ... en 'Keyhole Markup Language'"
diff --git a/config/locales/exports.fr.yml b/config/locales/exports.fr.yml
index f7ebac2d1..2d7cc0259 100644
--- a/config/locales/exports.fr.yml
+++ b/config/locales/exports.fr.yml
@@ -44,4 +44,4 @@ fr:
netex_export:
zero: "export"
one: "export NeTEx"
- other: "exports" \ No newline at end of file
+ other: "exports"
diff --git a/config/locales/formtastic.en.yml b/config/locales/formtastic.en.yml
new file mode 100644
index 000000000..c745059a3
--- /dev/null
+++ b/config/locales/formtastic.en.yml
@@ -0,0 +1,15 @@
+en:
+ formtastic:
+ yes: 'Yes'
+ no: 'No'
+ create: "Create %{model}"
+ update: "Update %{model}"
+ submit: 'Apply %{model}'
+ cancel: 'Cancel'
+ reset: 'Reset %{model}'
+ required: 'required'
+ import: "Launch import"
+ export: "Launch export"
+ validate: "Launch validation"
+ duplicate: "Duplicate"
+ clone: "Clone"
diff --git a/config/locales/formtastic.fr.yml b/config/locales/formtastic.fr.yml
new file mode 100644
index 000000000..89219f0b9
--- /dev/null
+++ b/config/locales/formtastic.fr.yml
@@ -0,0 +1,15 @@
+fr:
+ formtastic:
+ yes: 'Oui'
+ no: 'Non'
+ create: "Créer %{model}"
+ update: "Modifier %{model}"
+ submit: 'Valider %{model}'
+ cancel: 'Annuler'
+ reset: 'Réinitialiser %{model}'
+ required: 'requis'
+ import: "Lancer l'import"
+ export: "Lancer l'export"
+ validate: "Lancer la validation"
+ duplicate: "Dupliquer"
+ clone: "Cloner"
diff --git a/config/locales/formtastic.yml b/config/locales/formtastic.yml
deleted file mode 100644
index 13b82ef2e..000000000
--- a/config/locales/formtastic.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-en:
- formtastic:
- yes: 'Yes'
- no: 'No'
- create: "Create %{model}"
- update: "Update %{model}"
- submit: 'Apply %{model}'
- cancel: 'Cancel'
- reset: 'Reset %{model}'
- required: 'required'
- import: "Launch import"
- export: "Launch export"
- validate: "Launch validation"
- duplicate: "Duplicate"
- clone: "Clone"
-
-fr:
- formtastic:
- yes: 'Oui'
- no: 'Non'
- create: "Créer %{model}"
- update: "Modifier %{model}"
- submit: 'Valider %{model}'
- cancel: 'Annuler'
- reset: 'Réinitialiser %{model}'
- required: 'requis'
- import: "Lancer l'import"
- export: "Lancer l'export"
- validate: "Lancer la validation"
- duplicate: "Dupliquer"
- clone: "Cloner" \ No newline at end of file
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 6522fa211..696ae21a6 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1,6 +1,7 @@
fr:
"true": "Oui"
"false": "Non"
+ "unknown": "Non précisé"
time:
formats:
hour: "%Hh%M"
diff --git a/config/locales/group_of_lines.en.yml b/config/locales/group_of_lines.en.yml
new file mode 100644
index 000000000..00c1e1373
--- /dev/null
+++ b/config/locales/group_of_lines.en.yml
@@ -0,0 +1,61 @@
+en:
+ group_of_lines:
+ actions:
+ new: "Add a new group of lines"
+ edit: "Edit this group of lines"
+ destroy: "Remove this group of lines"
+ destroy_confirm: "Are you sure you want destroy this group of lines?"
+ new:
+ title: "Add a new group of lines"
+ edit:
+ title: "Update group of lines %{group_of_line}"
+ show:
+ title: "Group of lines %{group_of_line}"
+ lines: "Lines list"
+ index:
+ title: "Group of Lines"
+ name: "Search by name"
+ form:
+ lines: "Associated lines"
+ activerecord:
+ models:
+ group_of_line:
+ zero: "group of line"
+ one: "group of line"
+ other: "groups of lines"
+ attributes:
+ group_of_line:
+ name: "Name"
+ registration_number: "Registration number"
+ comment: "Comments"
+ line_count: "Number of lines"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by"
+ formtastic:
+ titles:
+ group_of_line:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ group_of_line:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ group_of_line:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ group_of_line:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ group_of_line:
+ name: "maximum 75 characters"
+ registration_number: "Positif integer, unique key, of no more than 8 digits."
+ objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 6."
diff --git a/config/locales/group_of_lines.fr.yml b/config/locales/group_of_lines.fr.yml
new file mode 100644
index 000000000..653862fd4
--- /dev/null
+++ b/config/locales/group_of_lines.fr.yml
@@ -0,0 +1,61 @@
+fr:
+ group_of_lines:
+ actions:
+ new: "Ajouter un groupe de lignes"
+ edit: "Modifier ce groupe de lignes"
+ destroy: "Supprimer ce groupe de lignes"
+ destroy_confirm: "Etes vous sûr de supprimer ce groupe de lignes ?"
+ new:
+ title: "Ajouter un groupe de lignes"
+ edit:
+ title: "Modifier le groupe de lignes %{group_of_line}"
+ show:
+ title: "Groupe de lignes %{group_of_line}"
+ lines: "Liste des lignes"
+ index:
+ title: "Groupes de lignes"
+ name: "Recherche par nom"
+ form:
+ lines: "Lignes associées"
+ activerecord:
+ models:
+ group_of_line:
+ zero: "groupe de lignes"
+ one: "groupe de lignes"
+ other: "groupes de lignes"
+ attributes:
+ group_of_line:
+ name: "Nom"
+ registration_number: "Numéro d'enregistrement"
+ comment: "Commentaire"
+ line_count: "Nombre de lignes"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ formtastic:
+ titles:
+ group_of_line:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ neptune:
+ group_of_line:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ netex:
+ group_of_line:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ gtfs:
+ group_of_line:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ hub:
+ group_of_line:
+ name: "maximum 75 caractères"
+ registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
+ objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 6."
diff --git a/config/locales/group_of_lines.yml b/config/locales/group_of_lines.yml
deleted file mode 100644
index d84c62682..000000000
--- a/config/locales/group_of_lines.yml
+++ /dev/null
@@ -1,124 +0,0 @@
-en:
- group_of_lines:
- actions:
- new: "Add a new group of lines"
- edit: "Edit this group of lines"
- destroy: "Remove this group of lines"
- destroy_confirm: "Are you sure you want destroy this group of lines?"
- new:
- title: "Add a new group of lines"
- edit:
- title: "Update group of lines %{group_of_line}"
- show:
- title: "Group of lines %{group_of_line}"
- lines: "Lines list"
- index:
- title: "Group of Lines"
- name: "Search by name"
- form:
- lines: "Associated lines"
- activerecord:
- models:
- group_of_line:
- zero: "group of line"
- one: "group of line"
- other: "groups of lines"
- attributes:
- group_of_line:
- name: "Name"
- registration_number: "Registration number"
- comment: "Comments"
- line_count: "Number of lines"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by"
- formtastic:
- titles:
- group_of_line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- neptune:
- group_of_line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- netex:
- group_of_line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- gtfs:
- group_of_line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- hub:
- group_of_lines:
- name: "Only alphanumerical or underscore characters. Maximum length = 75."
- registration_number: "Positif integer, unique key, of no more than 8 digits."
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 6."
-
-fr:
- group_of_lines:
- actions:
- new: "Ajouter un groupe de lignes"
- edit: "Modifier ce groupe de lignes"
- destroy: "Supprimer ce groupe de lignes"
- destroy_confirm: "Etes vous sûr de supprimer ce groupe de lignes ?"
- new:
- title: "Ajouter un groupe de lignes"
- edit:
- title: "Modifier le groupe de lignes %{group_of_line}"
- show:
- title: "Groupe de lignes %{group_of_line}"
- lines: "Liste des lignes"
- index:
- title: "Groupes de lignes"
- name: "Recherche par nom"
- form:
- lines: "Lignes associées"
- activerecord:
- models:
- group_of_line:
- zero: "groupe de lignes"
- one: "groupe de lignes"
- other: "groupes de lignes"
- attributes:
- group_of_line:
- name: "Nom"
- registration_number: "Numéro d'enregistrement"
- comment: "Commentaire"
- line_count: "Nombre de lignes"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- formtastic:
- titles:
- group_of_line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- neptune:
- group_of_line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- netex:
- group_of_line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- gtfs:
- group_of_line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- hub:
- group_of_lines:
- name: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 75."
- registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 6."
-
diff --git a/config/locales/ie_report.en.yml b/config/locales/ie_report.en.yml
index 06e49c016..645d41a04 100644
--- a/config/locales/ie_report.en.yml
+++ b/config/locales/ie_report.en.yml
@@ -1,11 +1,10 @@
en:
shared:
ie_report:
- html:
- search: 'Search'
- tab:
- file: 'Files'
- line: 'Lines'
+ search: 'Search'
+ tab:
+ file: 'Files'
+ line: 'Lines'
ie_report_line:
state:
default:
diff --git a/config/locales/ie_report.fr.yml b/config/locales/ie_report.fr.yml
index 844dfbbe0..758677994 100644
--- a/config/locales/ie_report.fr.yml
+++ b/config/locales/ie_report.fr.yml
@@ -1,22 +1,21 @@
fr:
shared:
ie_report:
- html:
- search: 'Recherche'
- tab:
- file: 'Fichiers'
- line: 'Lignes'
+ search: 'Recherche'
+ tab:
+ file: 'Fichiers'
+ line: 'Lignes'
ie_report_line:
state:
default:
- valid: 'Lignes sauvegardés'
- invalid: 'Lignes non-sauvegardés'
+ valid: 'Lignes sauvegardées'
+ invalid: 'Lignes non sauvegardées'
validation:
valid: 'Lignes valides'
invalid: 'Lignes invalides'
read_lines: 'Lignes lues'
- saved_lines: 'Lignes sauvegardés'
- unsaved_lines: 'Lignes non-sauvegardés'
+ saved_lines: 'Lignes sauvegardées'
+ unsaved_lines: 'Lignes non-sauvegardées'
table:
line:
state: "État"
diff --git a/config/locales/iev.en.yml b/config/locales/iev.en.yml
index 8e58196cb..eb1aaa10f 100644
--- a/config/locales/iev.en.yml
+++ b/config/locales/iev.en.yml
@@ -1,11 +1,22 @@
en:
iev:
failure:
- invalid_parameters: "Paramètres invalides"
- no_data_found: "Pas de données à traiter dans l'ensemble du traitement"
- no_data_proceeded: "Pas de données traitée dans l'ensemble du traitement"
- invalid_data: "Données invalides"
- internal_error: "Erreur interne"
+ invalid_parameters: "Invalid parameters"
+ no_data_found: "No data to be processed in the entire treatment"
+ no_data_proceeded: "No data processed in the overall treatment"
+ invalid_data: "Invalid data"
+ internal_error: "Internal Error"
exception:
- default: "Impossible d'accéder au service IEV"
- \ No newline at end of file
+ default: "Can not access IEV Service"
+ invalid_request: "Invalid request"
+ unknown_referential: "Unknown repository"
+ unknown_file: "Unknown file"
+ unknown_action: "Action or unknown type"
+ dupplicate_or_missing_data: "Missing data or duplicate"
+ dupplicate_parameters: "Parameters provided in double"
+ missing_parameters: "Missing action parameters"
+ invalid_parameters: "Incorrect action settings"
+ unreadable_parameters: "Unreadable parameters ( wrong format)"
+ unknown_job: "Unknown job number"
+ scheduled_job: "Prohibited Method on an unfinished job"
+ internal_error: "Internal Error"
diff --git a/config/locales/import_tasks.en.yml b/config/locales/import_tasks.en.yml
index 8c43a7997..ad633e872 100644
--- a/config/locales/import_tasks.en.yml
+++ b/config/locales/import_tasks.en.yml
@@ -29,7 +29,7 @@ en:
name: "Import name"
no_save: "No save"
resources: "File to import"
- references_type: "subset"
+ references_type: "Data to be imported"
rule_parameter_set_id: "Rule parameter set for compliance check"
object_id_prefix: "Neptune Id prefix"
max_distance_for_commercial: "Max distance for commercial stop"
@@ -50,4 +50,4 @@ en:
max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
- references_type: "Filter on stop areas import only GTFS stops and transfers files, these may contain extra attributes" \ No newline at end of file
+ references_type: "Filter on stop areas import only GTFS stops and transfers files, these may contain extra attributes"
diff --git a/config/locales/import_tasks.fr.yml b/config/locales/import_tasks.fr.yml
index 754bbe2ec..13e796520 100644
--- a/config/locales/import_tasks.fr.yml
+++ b/config/locales/import_tasks.fr.yml
@@ -29,7 +29,7 @@ fr:
name: "Nom de l'import"
no_save: "Pas de sauvegarde"
resources: "Fichier à importer"
- references_type: "Sous ensemble"
+ references_type: "Données à importer"
rule_parameter_set_id: "Jeu de paramètres pour validation"
object_id_prefix: "Préfixe d'identifiants"
max_distance_for_commercial: "Distance max pour créer les zones"
diff --git a/config/locales/imports.en.yml b/config/locales/imports.en.yml
index 32c4a2779..a5eb0f969 100644
--- a/config/locales/imports.en.yml
+++ b/config/locales/imports.en.yml
@@ -49,7 +49,7 @@ en:
resources: "File to import"
created_at: "Created on"
status: "Status"
- references_type: "subset"
+ references_type: "Data to be imported"
no_save: "No save"
rule_parameter_set_id: "Rule parameter set for compliance check"
object_id_prefix: "Neptune Id prefix"
diff --git a/config/locales/imports.fr.yml b/config/locales/imports.fr.yml
index 0eee4fc02..8fe8817f5 100644
--- a/config/locales/imports.fr.yml
+++ b/config/locales/imports.fr.yml
@@ -50,7 +50,7 @@ fr:
created_at: "Créé le"
status: "Status"
no_save: "Pas de sauvegarde"
- references_type: "Sous ensemble"
+ references_type: "Données à importer"
rule_parameter_set_id: "Jeu de paramètres pour validation"
object_id_prefix: "Préfixe d'identifiants"
max_distance_for_commercial: "Distance max pour créer les zones"
diff --git a/config/locales/job_status.en.yml b/config/locales/job_status.en.yml
new file mode 100644
index 000000000..a0da8e34a
--- /dev/null
+++ b/config/locales/job_status.en.yml
@@ -0,0 +1,4 @@
+en:
+ job_status:
+ title:
+ processed: Launched operation , click to display its progress.
diff --git a/config/locales/job_status.fr.yml b/config/locales/job_status.fr.yml
new file mode 100644
index 000000000..b6481b602
--- /dev/null
+++ b/config/locales/job_status.fr.yml
@@ -0,0 +1,4 @@
+fr:
+ job_status:
+ title:
+ processed: Opération lancée, cliquez pour afficher son état d'avancement.
diff --git a/config/locales/journey_frequencies.en.yml b/config/locales/journey_frequencies.en.yml
new file mode 100644
index 000000000..b6303c248
--- /dev/null
+++ b/config/locales/journey_frequencies.en.yml
@@ -0,0 +1,13 @@
+en:
+ journey_frequencies:
+ time_band: Time band
+ form:
+ add_line: Add a timeband
+ activerecord:
+ attributes:
+ journey_frequency:
+ first_departure_time: First departure
+ last_departure_time: Last departure
+ scheduled_headway_interval: Interval
+ exact_time: Exact?
+ timeband: Time bands
diff --git a/config/locales/journey_frequencies.fr.yml b/config/locales/journey_frequencies.fr.yml
new file mode 100644
index 000000000..7c5a25c73
--- /dev/null
+++ b/config/locales/journey_frequencies.fr.yml
@@ -0,0 +1,13 @@
+fr:
+ journey_frequencies:
+ time_band: Créneaux horaires
+ form:
+ add_line: Ajouter un créneau
+ activerecord:
+ attributes:
+ journey_frequency:
+ first_departure_time: Premier départ
+ last_departure_time: Dernier départ
+ scheduled_headway_interval: Intervalle
+ exact_time: Exact ?
+ timeband: Créneau horaire
diff --git a/config/locales/journey_patterns.en.yml b/config/locales/journey_patterns.en.yml
new file mode 100644
index 000000000..379d184b6
--- /dev/null
+++ b/config/locales/journey_patterns.en.yml
@@ -0,0 +1,67 @@
+en:
+ journey_patterns:
+ journey_pattern:
+ 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"
+ destroy: "Remove this journey pattern"
+ destroy_confirm: A"re you sure you want destroy this journey pattern ?"
+ new:
+ title: "Add a new journey pattern"
+ edit:
+ title: "Update journey pattern %{journey_pattern}"
+ show:
+ title: "Journey Pattern %{journey_pattern}"
+ 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:
+ zero: "journey pattern"
+ one: "journey pattern"
+ other: "journey patterns"
+ attributes:
+ journey_pattern:
+ route: "Route"
+ name: "Name"
+ published_name: "Published name"
+ comment: "Comments"
+ registration_number: "Registration number"
+ stop_point_ids: "Route's stop selection"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by"
+ formtastic:
+ titles:
+ journey_pattern:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ journey_pattern:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ journey_pattern:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ journey_pattern:
+ name: ""
+ registration_number: "Positif integer."
+ objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ journey_pattern:
+ name: "Maximum length = 75."
+ registration_number: "Positif integer, unique key, of no more than 8 digits."
+ objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 30."
diff --git a/config/locales/journey_patterns.fr.yml b/config/locales/journey_patterns.fr.yml
new file mode 100644
index 000000000..bdf220ab0
--- /dev/null
+++ b/config/locales/journey_patterns.fr.yml
@@ -0,0 +1,67 @@
+fr:
+ journey_patterns:
+ journey_pattern:
+ 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"
+ destroy: "Supprimer cette mission"
+ destroy_confirm: "Etes vous sûr de vouloir détruire cette mission ?"
+ new:
+ title: "Ajouter une mission"
+ edit:
+ title: "Modifier la mission %{journey_pattern}"
+ show:
+ title: "Mission %{journey_pattern}"
+ 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:
+ zero: "mission"
+ one: "mission"
+ other: "missions"
+ attributes:
+ journey_pattern:
+ route: "Séquence d'arrêts"
+ name: "Nom"
+ published_name: "Nom public"
+ comment: "Commentaire"
+ registration_number: "Numéro d'enregistrement"
+ stop_point_ids: "Sélection des arrêts desservis"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ formtastic:
+ titles:
+ journey_pattern:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ neptune:
+ journey_pattern:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ netex:
+ journey_pattern:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ gtfs:
+ journey_pattern:
+ name: ""
+ registration_number: "Entier positif."
+ objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ hub:
+ journey_pattern:
+ name: "Longueur maximale = 75."
+ registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
+ objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 30."
diff --git a/config/locales/journey_patterns.yml b/config/locales/journey_patterns.yml
index 8d76778ef..3e2ddec99 100644
--- a/config/locales/journey_patterns.yml
+++ b/config/locales/journey_patterns.yml
@@ -9,21 +9,22 @@ en:
new: "Add a new journey_pattern"
edit: "Edit this journey pattern"
destroy: "Remove this journey pattern"
- destroy_confirm: A"re you sure you want destroy this journey pattern ?"
+ destroy_confirm: "Are you sure you want destroy this journey pattern ?"
+ edit_route_sections: "Edit Shape"
new:
title: "Add a new journey pattern"
edit:
title: "Update journey pattern %{journey_pattern}"
show:
title: "Journey Pattern %{journey_pattern}"
- stop_points: "Stop point on journey pattern list"
+ 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:
+ activerecord:
+ models:
+ journey_pattern:
zero: "journey pattern"
one: "journey pattern"
other: "journey patterns"
@@ -31,7 +32,7 @@ en:
journey_pattern:
route: "Route"
name: "Name"
- published_name: "Published name"
+ published_name: "Published name"
comment: "Comments"
registration_number: "Registration number"
stop_point_ids: "Route's stop selection"
@@ -43,27 +44,27 @@ en:
titles:
journey_pattern:
name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
+ registration_number: "Positif integer."
objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
neptune:
journey_pattern:
name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
+ registration_number: "Positif integer."
objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
netex:
journey_pattern:
name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
+ registration_number: "Positif integer."
objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
gtfs:
journey_pattern:
name: "Only alphanumerical or underscore characters."
- registration_number: "Positif integer."
+ registration_number: "Positif integer."
objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
hub:
journey_pattern:
name: "Only alphanumerical or underscore characters. Maximum length = 75."
- registration_number: "Positif integer, unique key, of no more than 8 digits."
+ registration_number: "Positif integer, unique key, of no more than 8 digits."
objectid: "[prefix]:JourneyPattern:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 30."
fr:
@@ -78,20 +79,21 @@ fr:
edit: "Modifier cette mission"
destroy: "Supprimer cette mission"
destroy_confirm: "Etes vous sûr de vouloir détruire cette mission ?"
+ edit_route_sections: "Modifier le tracé"
new:
title: "Ajouter une mission"
edit:
title: "Modifier la mission %{journey_pattern}"
show:
title: "Mission %{journey_pattern}"
- stop_points: "Liste des arrêts de la mission"
+ 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:
+ activerecord:
+ models:
+ journey_pattern:
zero: "mission"
one: "mission"
other: "missions"
@@ -99,7 +101,7 @@ fr:
journey_pattern:
route: "Séquence d'arrêts"
name: "Nom"
- published_name: "Nom public"
+ published_name: "Nom public"
comment: "Commentaire"
registration_number: "Numéro d'enregistrement"
stop_point_ids: "Sélection des arrêts desservis"
@@ -111,25 +113,25 @@ fr:
titles:
journey_pattern:
name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
+ registration_number: "Entier positif."
objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
neptune:
journey_pattern:
name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
+ registration_number: "Entier positif."
objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
netex:
journey_pattern:
name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
+ registration_number: "Entier positif."
objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
gtfs:
journey_pattern:
name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "Entier positif."
+ registration_number: "Entier positif."
objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
hub:
journey_pattern:
name: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 75."
- registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
+ registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
objectid: "[prefixe]:JourneyPattern:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 30."
diff --git a/config/locales/layouts.en.yml b/config/locales/layouts.en.yml
new file mode 100644
index 000000000..aa9985a53
--- /dev/null
+++ b/config/locales/layouts.en.yml
@@ -0,0 +1,41 @@
+en:
+ layouts:
+ back_to_dashboard: "Back to Dashboard"
+ help: "Help"
+ home: "Home"
+ user:
+ profile: "My Profile"
+ sign_out: "Sign out"
+ navbar:
+ return_to_referentials: "Return to data spaces"
+ select_referential: "Select data space"
+ select_referential_datas: "Select datas"
+ return_to_dashboard: "Return to Dashboard"
+ referential_datas: "Datas"
+ history_tag:
+ title: "Metadatas"
+ created_at: "Created at"
+ updated_at: "Updated at"
+ user_name: "User"
+ no_save: "No backup"
+ flash_messages:
+ success: "Success"
+ error: "Error"
+ alert: "Alert"
+ notice: "Info"
+ footer:
+ support:
+ title: "Support"
+ technical_support: "Technical support"
+ help: "Help"
+ good_practices: "Good pratices"
+ product:
+ title: "Product"
+ licence: "Licence"
+ source_code: "Source code"
+ user_group: "User group"
+ contact:
+ title: "Contact"
+ mail: "Contact us"
+ newsletter: "Newsletter"
+ forum: "Forum"
diff --git a/config/locales/layouts.yml b/config/locales/layouts.fr.yml
index 361f2322f..0c56375fa 100644
--- a/config/locales/layouts.yml
+++ b/config/locales/layouts.fr.yml
@@ -1,44 +1,3 @@
-en:
- layouts:
- back_to_dashboard: "Back to Dashboard"
- help: "Help"
- home: "Home"
- user:
- profile: "My Profile"
- sign_out: "Sign out"
- navbar:
- return_to_referentials: "Return to data spaces"
- select_referential: "Select data space"
- select_referential_datas: "Select datas"
- return_to_dashboard: "Return to Dashboard"
- referential_datas: "Datas"
- history_tag:
- title: "Metadatas"
- created_at: "Created at"
- updated_at: "Updated at"
- user_name: "User"
- no_save: "No backup"
- flash_messages:
- success: "Success"
- error: "Error"
- alert: "Alert"
- notice: "Info"
- footer:
- support:
- title: "Support"
- technical_support: "Technical support"
- help: "Help"
- good_practices: "Good pratices"
- product:
- title: "Product"
- licence: "Licence"
- source_code: "Source code"
- user_group: "User group"
- contact:
- title: "Contact"
- mail: "Contact us"
- newsletter: "Newsletter"
- forum: "Forum"
fr:
layouts:
back_to_dashboard: "Retour au Tableau de Bord"
diff --git a/config/locales/lines.yml b/config/locales/lines.yml
deleted file mode 100644
index 331c09d1c..000000000
--- a/config/locales/lines.yml
+++ /dev/null
@@ -1,233 +0,0 @@
-en:
- lines:
- actions:
- new: "Add a new line"
- edit: "Edit this line"
- destroy: "Remove this line"
- destroy_confirm: "Are you sure you want destroy this line?"
- destroy_selection_confirm: "Are you sure you want destroy those lines?"
- import: "Import lines"
- export_kml: "Export KML line"
- export__kml_all: "Export KML lines"
- export_hub: "Export HUB line"
- export__hub_all: "Export HUB lines"
- new:
- title: "Add a new line"
- edit:
- title: "Update line %{line}"
- show:
- title: "Line %{line}"
- itineraries: "Line's route list"
- group_of_lines: "Groups of lines"
- index:
- title: "Lines"
- name_or_number: "Search by name or number"
- no_networks: "No networks"
- no_companies: "No companies"
- no_group_of_lines: "No group of lines"
- all_networks: "All networks"
- all_companies: "All companies"
- all_group_of_lines: "All group of lines"
- multi_selection: "Multiple selection"
- multi_selection_enable: "Enable multiple selection"
- multi_selection_disable: "Disable multiple selection"
- delete_selected: "Delete lines"
- export_selected: "Export lines"
- select_all: "Select all"
- deselect_all: "Deselect all"
- unset: "undefined"
- advanced_search: "Advanced Search"
- color: "Colors"
- form:
- group_of_lines: "Associated groups of lines"
- no_group_of_line: "No group of line"
- several_group_of_lines: "%{count} groups of lines"
- activerecord:
- models:
- line:
- zero: "line"
- one: "line"
- other: "lines"
- attributes:
- line:
- network: "Network"
- company: "Company"
- registration_number: "Registration number"
- name: "Name"
- published_name: "Published name"
- number: "Number"
- transport_mode: "Transport mode"
- url: "Web page"
- color: "Line color"
- text_color: "Text color"
- mobility_restricted_suitability: "PRM accessibility"
- flexible_service: "On demond transportation"
- unspecified_mrs: "Not specified"
- accessible: "Accessible"
- not_accessible: "Not accessible"
- unspecified_fs: "Not specified"
- on_demaond_fs: "On demond service"
- regular_fs: "Regular service"
- number_of_vj: "Total number of vehicle journeys"
- number_of_fs_vj: "Number of on demond vehicle journeys"
- number_of_mrs_vj: "Number of accessible vehicle journeys"
- number_of_non_fs_vj: "Number of non on demond vehicle journeys"
- number_of_non_mrs_vj: "Number of non accessible vehicle journeys"
- number_of_null_fs_vj: "Number of unspecified on demond vehicle journeys"
- number_of_null_mrs_vj: "Number of unspecified accessible vehicle journeys"
- default_fs_msg: "These vehicle journeys are considered as regular"
- group_of_line: "Group of lines"
- comment: "Comments"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by"
- footnotes: "Footnotes"
- formtastic:
- titles:
- line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- number: ""
- neptune:
- line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- number: ""
- netex:
- line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- number: ""
- gtfs:
- line:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- number: ""
- hub:
- line:
- name: "Only alphanumerical or underscore characters. Maximum length = 75."
- registration_number: "Positif integer, unique key, of no more than 8 digits."
- objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 14."
- number: "Only alphanumerical or underscore characters. Maximum length = 6."
-
-fr:
- lines:
- actions:
- new: "Ajouter une ligne"
- edit: "Modifier cette ligne"
- destroy: "Supprimer cette ligne"
- destroy_confirm: "Etes vous sûr de supprimer cette ligne ?"
- destroy_selection_confirm: "Etes vous sûr de supprimer cette sélection de lignes ?"
- import: "Importer des lignes"
- export_kml: "Export KML de la ligne"
- export_kml_all: "Export KML des lignes"
- export_hub: "Export HUB de la ligne"
- export_hub_all: "Export HUB des lignes"
- new:
- title: "Ajouter une ligne"
- edit:
- title: "Modifier la ligne %{line}"
- show:
- title: "Ligne %{line}"
- itineraries: "Liste des séquences d'arrêts de la ligne"
- group_of_lines: "Groupes de lignes"
- index:
- name_or_number: "Recherche par nom ou indice"
- title: "Lignes"
- no_networks: "Aucun réseaux"
- no_companies: "Aucun transporteurs"
- no_group_of_lines: "Aucun groupes de ligne"
- all_networks: "Tous les réseaux"
- all_companies: "Tous les transporteurs"
- all_group_of_lines: "Tous les groupes de ligne"
- multi_selection: "Sélection multiple"
- multi_selection_enable: "Activer la sélection multiple"
- multi_selection_disable: "Désactiver la sélection multiple"
- delete_selected: "Supprimer les lignes"
- export_selected: "Exporter les lignes"
- select_all: "Tout sélectionner"
- deselect_all: "Tout désélectionner"
- unset: "non défini"
- advanced_search: "Recherche avancée"
- color: "Couleurs"
- form:
- group_of_lines: "Groupes de lignes associés"
- no_group_of_line: "Aucun groupe de lignes"
- several_group_of_lines: "%{count} groupes of lignes"
- activerecord:
- models:
- line:
- zero: "ligne"
- one: "ligne"
- other: "lignes"
- attributes:
- line:
- network: "Réseau"
- company: "Transporteur"
- registration_number: "Numéro d'enregistrement"
- name: "Nom"
- published_name: "Nom public"
- number: "Indice"
- transport_mode: "Mode de transport"
- url: "Page web associée"
- color: "Couleur du tracé"
- text_color: "Couleur du texte"
- mobility_restricted_suitability: "Accessibilité PMR"
- flexible_service: "Transport à la demande"
- unspecified_mrs: "Non spécifié"
- accessible: "Accessible"
- not_accessible: "Non accessible"
- unspecified_fs: "Non spécifié"
- on_demaond_fs: "Service à la demande"
- regular_fs: "Service régulier"
- number_of_vj: "Nombre total de courses"
- number_of_fs_vj: "Nombre de courses à la demande"
- number_of_mrs_vj: "Nombre de courses accessibles"
- number_of_non_fs_vj: "Nombre de courses régulières"
- number_of_non_mrs_vj: "Nombre de courses non accessibles"
- number_of_null_fs_vj: "Nombre de courses sans spécification de type de service"
- number_of_null_mrs_vj: "Nombre de courses sans spécification d'accessibilité"
- default_fs_msg: "Ces courses sont considérées régulières"
- group_of_line: "Groupe de lignes"
- comment: "Commentaire"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- footnotes: "Notes de bas de page"
- formtastic:
- titles:
- line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- number: ""
- neptune:
- line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- number: ""
- netex:
- line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- number: ""
- gtfs:
- line:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- number: ""
- hub:
- line:
- name: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 75."
- registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
- objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 14."
- number: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 6."
diff --git a/config/locales/lines_en.yml b/config/locales/lines_en.yml
new file mode 100644
index 000000000..b0200240b
--- /dev/null
+++ b/config/locales/lines_en.yml
@@ -0,0 +1,118 @@
+en:
+ lines:
+ actions:
+ new: "Add a new line"
+ edit: "Edit this line"
+ destroy: "Remove this line"
+ destroy_confirm: "Are you sure you want destroy this line?"
+ destroy_selection_confirm: "Are you sure you want destroy those lines?"
+ import: "Import lines"
+ export_kml: "Export KML line"
+ export__kml_all: "Export KML lines"
+ export_hub: "Export HUB line"
+ export__hub_all: "Export HUB lines"
+ new:
+ title: "Add a new line"
+ edit:
+ title: "Update line %{line}"
+ show:
+ title: "Line %{line}"
+ itineraries: "Line's route list"
+ group_of_lines: "Groups of lines"
+ index:
+ title: "Lines"
+ name_or_number: "Search by name or number"
+ no_networks: "No networks"
+ no_companies: "No companies"
+ no_group_of_lines: "No group of lines"
+ all_networks: "All networks"
+ all_companies: "All companies"
+ all_group_of_lines: "All group of lines"
+ multi_selection: "Multiple selection"
+ multi_selection_enable: "Enable multiple selection"
+ multi_selection_disable: "Disable multiple selection"
+ delete_selected: "Delete lines"
+ export_selected: "Export lines"
+ select_all: "Select all"
+ deselect_all: "Deselect all"
+ unset: "undefined"
+ advanced_search: "Advanced Search"
+ color: "Color"
+ form:
+ group_of_lines: "Associated groups of lines"
+ no_group_of_line: "No group of line"
+ several_group_of_lines: "%{count} groups of lines"
+ activerecord:
+ models:
+ line:
+ zero: "line"
+ one: "line"
+ other: "lines"
+ attributes:
+ line:
+ network: "Network"
+ company: "Company"
+ registration_number: "Registration number"
+ name: "Name"
+ published_name: "Published name"
+ number: "Number"
+ transport_mode: "Transport mode"
+ url: "Web page"
+ color: "Line color"
+ text_color: "Text color"
+ mobility_restricted_suitability: "PRM accessibility"
+ flexible_service: "On demond transportation"
+ unspecified_mrs: "Not specified"
+ accessible: "Accessible"
+ not_accessible: "Not accessible"
+ unspecified_fs: "Not specified"
+ on_demaond_fs: "On demond service"
+ regular_fs: "Regular service"
+ number_of_vj: "Total number of vehicle journeys"
+ number_of_fs_vj: "Number of on demond vehicle journeys"
+ number_of_mrs_vj: "Number of accessible vehicle journeys"
+ number_of_non_fs_vj: "Number of non on demond vehicle journeys"
+ number_of_non_mrs_vj: "Number of non accessible vehicle journeys"
+ number_of_null_fs_vj: "Number of unspecified on demond vehicle journeys"
+ number_of_null_mrs_vj: "Number of unspecified accessible vehicle journeys"
+ default_fs_msg: "These vehicle journeys are considered as regular"
+ group_of_line: "Group of lines"
+ comment: "Comments"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by"
+ footnotes: "Footnotes"
+ stable_id: External permanent idenifier"
+ formtastic:
+ titles:
+ line:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ number: ""
+ neptune:
+ line:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ number: ""
+ netex:
+ line:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ number: ""
+ gtfs:
+ line:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ number: ""
+ hub:
+ line:
+ name: "maximum 75 characters"
+ registration_number: "Positif integer, unique key, of no more than 8 digits."
+ objectid: "[prefix]:Line:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 14."
+ number: "Only alphanumerical or underscore characters. Maximum length = 6."
+
diff --git a/config/locales/lines_fr.yml b/config/locales/lines_fr.yml
new file mode 100644
index 000000000..ad0bee6c2
--- /dev/null
+++ b/config/locales/lines_fr.yml
@@ -0,0 +1,117 @@
+fr:
+ lines:
+ actions:
+ new: "Ajouter une ligne"
+ edit: "Modifier cette ligne"
+ destroy: "Supprimer cette ligne"
+ destroy_confirm: "Etes vous sûr de supprimer cette ligne ?"
+ destroy_selection_confirm: "Etes vous sûr de supprimer cette sélection de lignes ?"
+ import: "Importer des lignes"
+ export_kml: "Export KML de la ligne"
+ export_kml_all: "Export KML des lignes"
+ export_hub: "Export HUB de la ligne"
+ export_hub_all: "Export HUB des lignes"
+ new:
+ title: "Ajouter une ligne"
+ edit:
+ title: "Modifier la ligne %{line}"
+ show:
+ title: "Ligne %{line}"
+ itineraries: "Liste des séquences d'arrêts de la ligne"
+ group_of_lines: "Groupes de lignes"
+ index:
+ name_or_number: "Recherche par nom ou indice"
+ title: "Lignes"
+ no_networks: "Aucun réseaux"
+ no_companies: "Aucun transporteurs"
+ no_group_of_lines: "Aucun groupes de ligne"
+ all_networks: "Tous les réseaux"
+ all_companies: "Tous les transporteurs"
+ all_group_of_lines: "Tous les groupes de ligne"
+ multi_selection: "Sélection multiple"
+ multi_selection_enable: "Activer la sélection multiple"
+ multi_selection_disable: "Désactiver la sélection multiple"
+ delete_selected: "Supprimer les lignes"
+ export_selected: "Exporter les lignes"
+ select_all: "Tout sélectionner"
+ deselect_all: "Tout désélectionner"
+ unset: "non défini"
+ advanced_search: "Recherche avancée"
+ color: "Couleur"
+ form:
+ group_of_lines: "Groupes de lignes associés"
+ no_group_of_line: "Aucun groupe de lignes"
+ several_group_of_lines: "%{count} groupes of lignes"
+ activerecord:
+ models:
+ line:
+ zero: "ligne"
+ one: "ligne"
+ other: "lignes"
+ attributes:
+ line:
+ network: "Réseau"
+ company: "Transporteur"
+ registration_number: "Numéro d'enregistrement"
+ name: "Nom"
+ published_name: "Nom public"
+ number: "Indice"
+ transport_mode: "Mode de transport"
+ url: "Page web associée"
+ color: "Couleur du tracé"
+ text_color: "Couleur du texte"
+ mobility_restricted_suitability: "Accessibilité PMR"
+ flexible_service: "Transport à la demande"
+ unspecified_mrs: "Non spécifié"
+ accessible: "Accessible"
+ not_accessible: "Non accessible"
+ unspecified_fs: "Non spécifié"
+ on_demaond_fs: "Service à la demande"
+ regular_fs: "Service régulier"
+ number_of_vj: "Nombre total de courses"
+ number_of_fs_vj: "Nombre de courses à la demande"
+ number_of_mrs_vj: "Nombre de courses accessibles"
+ number_of_non_fs_vj: "Nombre de courses régulières"
+ number_of_non_mrs_vj: "Nombre de courses non accessibles"
+ number_of_null_fs_vj: "Nombre de courses sans spécification de type de service"
+ number_of_null_mrs_vj: "Nombre de courses sans spécification d'accessibilité"
+ default_fs_msg: "Ces courses sont considérées régulières"
+ group_of_line: "Groupe de lignes"
+ comment: "Commentaire"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ footnotes: "Notes de bas de page"
+ stable_id: "Identifiant externe pérenne"
+ formtastic:
+ titles:
+ line:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ number: ""
+ neptune:
+ line:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ number: ""
+ netex:
+ line:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ number: ""
+ gtfs:
+ line:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ number: ""
+ hub:
+ line:
+ name: "maximum 75 caractères"
+ registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
+ objectid: "[prefixe]:Line:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 14."
+ number: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 6."
diff --git a/config/locales/maps.en.yml b/config/locales/maps.en.yml
new file mode 100644
index 000000000..89aefa8a2
--- /dev/null
+++ b/config/locales/maps.en.yml
@@ -0,0 +1,9 @@
+en:
+ maps:
+ ign_map: "IGN scans"
+ ign_ortho: "IGN orthophotos"
+ ign_cadastre: "IGN parcels"
+ google_physical: "Google physical"
+ google_streets: "Google streets"
+ google_hybrid: "Google hybrid"
+ google_satellite: "Google orthophotos"
diff --git a/config/locales/maps.fr.yml b/config/locales/maps.fr.yml
new file mode 100644
index 000000000..7325cd662
--- /dev/null
+++ b/config/locales/maps.fr.yml
@@ -0,0 +1,9 @@
+fr:
+ maps:
+ ign_map: "Scans IGN"
+ ign_ortho: "Orthophoto IGN"
+ ign_cadastre: "Cadastre IGN"
+ google_physical: "Relief Google"
+ google_streets: "Routier Google"
+ google_hybrid: "Hybride Google"
+ google_satellite: "Orthophoto Google"
diff --git a/config/locales/maps.yml b/config/locales/maps.yml
deleted file mode 100644
index ea01961dc..000000000
--- a/config/locales/maps.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-en:
- maps:
- ign_map: "IGN scans"
- ign_ortho: "IGN orthophotos"
- ign_cadastre: "IGN parcels"
- google_physical: "Google physical"
- google_streets: "Google streets"
- google_hybrid: "Google hybrid"
- google_satellite: "Google orthophotos"
-fr:
- maps:
- ign_map: "Scans IGN"
- ign_ortho: "Orthophoto IGN"
- ign_cadastre: "Cadastre IGN"
- google_physical: "Relief Google"
- google_streets: "Routier Google"
- google_hybrid: "Hybride Google"
- google_satellite: "Orthophoto Google"
-
-
diff --git a/config/locales/networks.en.yml b/config/locales/networks.en.yml
new file mode 100644
index 000000000..ccb4dd791
--- /dev/null
+++ b/config/locales/networks.en.yml
@@ -0,0 +1,62 @@
+en:
+ networks:
+ actions:
+ new: "Add a new network"
+ edit: "Edit this network"
+ destroy: "Remove this network"
+ destroy_confirm: "Are you sure you want destroy this network?"
+ new:
+ title: "Add a new network"
+ edit:
+ title: "Update network %{network}"
+ show:
+ title: "Network"
+ index:
+ title: "Networks"
+ name: "Search by name"
+ activerecord:
+ models:
+ network:
+ zero: "network"
+ one: "network"
+ other: "networks"
+ attributes:
+ network:
+ registration_number: "Registration number"
+ name: "Name"
+ comment: "Comments"
+ version_date: "Date of this network's version"
+ description: "Description"
+ source_type_name: "Source type"
+ source_name: "Source name"
+ source_identifier: "Source identifier"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by "
+ formtastic:
+ titles:
+ network:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:PTNetwork:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ network:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:PTNetwork:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ network:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:PTNetwork:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ network:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:PTNetwork:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ network:
+ name: "maximum 75 characters"
+ registration_number: "Positif integer, unique key, of no more than 8 digits."
+ objectid: "[prefix]:PTNetwork:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 3."
diff --git a/config/locales/networks.fr.yml b/config/locales/networks.fr.yml
new file mode 100644
index 000000000..d8572326e
--- /dev/null
+++ b/config/locales/networks.fr.yml
@@ -0,0 +1,62 @@
+fr:
+ networks:
+ actions:
+ new: "Ajouter un réseau"
+ edit: "Modifier ce réseau"
+ destroy: "Supprimer ce réseau"
+ destroy_confirm: "Etes vous sûr de supprimer ce réseau ?"
+ new:
+ title: "Ajouter un réseau"
+ edit:
+ title: "Modifier le réseau %{network}"
+ show:
+ title: "Réseau %{network}"
+ index:
+ title: "Réseaux"
+ name: "Recherche par nom"
+ activerecord:
+ models:
+ network:
+ zero: "réseau"
+ one: "réseau"
+ other: "réseaux"
+ attributes:
+ network:
+ registration_number: "Numéro d'enregistrement"
+ name: "Nom"
+ comment: "Commentaire"
+ version_date: "Date de version"
+ description: "Description"
+ source_type_name: "Type de système origine"
+ source_name: "Nom du système origine"
+ source_identifier: "Identifiant du système origine"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ formtastic:
+ titles:
+ network:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:PTNetwork:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ neptune:
+ network:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:PTNetwork:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ netex:
+ network:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:PTNetwork:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ gtfs:
+ network:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:PTNetwork:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ hub:
+ network:
+ name: "maximum 75 caractères"
+ registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
+ objectid: "[prefixe]:PTNetwork:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 3."
diff --git a/config/locales/networks.yml b/config/locales/networks.yml
deleted file mode 100644
index 127d2b920..000000000
--- a/config/locales/networks.yml
+++ /dev/null
@@ -1,126 +0,0 @@
-en:
- networks:
- actions:
- new: "Add a new network"
- edit: "Edit this network"
- destroy: "Remove this network"
- destroy_confirm: "Are you sure you want destroy this network?"
- new:
- title: "Add a new network"
- edit:
- title: "Update network %{network}"
- show:
- title: "Network"
- index:
- title: "Networks"
- name: "Search by name"
- activerecord:
- models:
- network:
- zero: "network"
- one: "network"
- other: "networks"
- attributes:
- network:
- registration_number: "Registration number"
- name: "Name"
- comment: "Comments"
- version_date: "Date of this network's version"
- description: "Description"
- source_type: "Source type"
- source_name: "Source name"
- source_identifier: "Source identifier"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by "
- formtastic:
- titles:
- network:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- neptune:
- network:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- netex:
- network:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- gtfs:
- network:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- hub:
- network:
- name: "Only alphanumerical or underscore characters. Maximum length = 75."
- registration_number: "Positif integer, unique key, of no more than 8 digits."
- objectid: "[prefix]:GroupOfLine:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 3."
-
-fr:
- networks:
- actions:
- new: "Ajouter un réseau"
- edit: "Modifier ce réseau"
- destroy: "Supprimer ce réseau"
- destroy_confirm: "Etes vous sûr de supprimer ce réseau ?"
- new:
- title: "Ajouter un réseau"
- edit:
- title: "Modifier le réseau %{network}"
- show:
- title: "Réseau %{network}"
- index:
- title: "Réseaux"
- name: "Recherche par nom"
- activerecord:
- models:
- network:
- zero: "réseau"
- one: "réseau"
- other: "réseaux"
- attributes:
- network:
- registration_number: "Numéro d'enregistrement"
- name: "Nom"
- comment: "Commentaire"
- version_date: "Date de version"
- description: "Description"
- source_type: "Type de système origine"
- source_name: "Nom du système origine"
- source_identifier: "Identifiant du système origine"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- formtastic:
- titles:
- network:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- neptune:
- network:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- netex:
- network:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- gtfs:
- network:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- hub:
- network:
- name: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 75."
- registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres."
- objectid: "[prefixe]:GroupOfLine:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 3."
-
diff --git a/config/locales/organisations.en.yml b/config/locales/organisations.en.yml
new file mode 100644
index 000000000..617e61ca2
--- /dev/null
+++ b/config/locales/organisations.en.yml
@@ -0,0 +1,18 @@
+en:
+ organisations:
+ actions:
+ edit: "Edit your organisation"
+ edit:
+ title: "Update your organisation"
+ key_registered: "Key registered"
+ key_not_registered: "No key registered"
+ show:
+ users: "Users"
+ rule_parameter_sets: "Rule parameter sets"
+ activerecord:
+ attributes:
+ organisation:
+ name: "Name"
+ data_format_restrictions_by_default: "Data format constraint by default"
+ data_format: "Data format"
+ geoportail_key: "IGN Geoportail Key"
diff --git a/config/locales/organisations.yml b/config/locales/organisations.fr.yml
index d328db897..eb001aa47 100644
--- a/config/locales/organisations.yml
+++ b/config/locales/organisations.fr.yml
@@ -1,22 +1,3 @@
-en:
- organisations:
- actions:
- edit: "Edit your organisation"
- edit:
- title: "Update your organisation"
- key_registered: "Key registered"
- key_not_registered: "No key registered"
- show:
- users: "Users"
- rule_parameter_sets: "Rule parameter sets"
- activerecord:
- attributes:
- organisation:
- name: "Name"
- data_format_restrictions_by_default: "Data format constraint by default"
- data_format: "Data format"
- geoportail_key: "IGN Geoportail Key"
-
fr:
organisations:
actions:
diff --git a/config/locales/referentials.en.yml b/config/locales/referentials.en.yml
new file mode 100644
index 000000000..4064db841
--- /dev/null
+++ b/config/locales/referentials.en.yml
@@ -0,0 +1,78 @@
+en:
+ referentials:
+ edit:
+ title: "Edit the data space"
+ show:
+ lines: "lines"
+ networks: "networks"
+ vehicle_journeys: "vehicle journeys"
+ time_tables: "time tables"
+ title: "Data space"
+ clean_up: "Clean up"
+ api_keys: "Authentification keys for an API REST access"
+ counts:
+ objects: "Data space elements"
+ count: "count"
+ validity_out:
+ validity_out_time_tables: "Closed timetables"
+ validity_out_soon_time_tables: "Timetables closed in %{count} days"
+ new:
+ title: "Create a new data space"
+ submit: "Create a data space"
+ actions:
+ new: "Add a data space"
+ destroy_confirm: "Do you confirm to destroy this data space ?"
+ destroy: "Destroy this data space"
+ edit: "Edit this data space"
+ errors:
+ pg_excluded: "can't begins with pg_"
+ public_excluded: "public is a reserved value"
+ user_excluded: "%{user} is a reserved value"
+ activerecord:
+ models:
+ referential:
+ zero: "Data space"
+ one: "Data space"
+ other: "Data spaces"
+ attributes:
+ referential:
+ name: "Name"
+ slug: "Code"
+ prefix: "Neptune Object Id prefix"
+ projection_type: "Optional spatial reference system code (SRID)"
+ time_zone: "time zone"
+ upper_corner: "Top,Right corner for default bounding box"
+ lower_corner: "Bottom,Left corner for default bounding box"
+ resources: "Neptune Import File"
+ validity_period: "Validity period"
+ no_validity_period: "undefined"
+ start_validity_period: "from"
+ end_validity_period: "to"
+ networks: "Networks"
+ group_of_lines: "Group of lines"
+ lines: "Lines"
+ vehicle_journeys: "Vehicle journeys"
+ companies: "Companies"
+ stop_areas: "Stop Areas"
+ access_points: "Access Points"
+ time_tables: "Time tables"
+ connection_links: "Connection links"
+ quays: "quays"
+ boarding_positions: "boarding positions"
+ commercial_stops: "commercial stops"
+ stop_places: "stop places"
+ itls: "routing contraints"
+ imports: "Imports"
+ exports: "Exports"
+ compliance_checks: "Validations"
+ rule_parameter_sets: "Rule parameters sets"
+ data_format_restrictions: "Data format constraint"
+ data_format: "Favorite format for export"
+ timebands: "Time bands"
+ formtastic:
+ titles:
+ referential:
+ slug: "only lowercase alphanumerical or underscore characters, first character must be a letter"
+ prefix: "only alphanumerical or underscore characters"
+ upper_corner: "latitude,longitude in WGS84 referential, dot for decimal separator"
+ lower_corner: "latitude,longitude in WGS84 referential, dot for decimal separator"
diff --git a/config/locales/referentials.yml b/config/locales/referentials.fr.yml
index f1c0c55e1..d8b72d3e3 100644
--- a/config/locales/referentials.yml
+++ b/config/locales/referentials.fr.yml
@@ -1,81 +1,3 @@
-en:
- referentials:
- edit:
- title: "Edit the data space"
- show:
- lines: "lines"
- networks: "networks"
- vehicle_journeys: "vehicle journeys"
- time_tables: "time tables"
- title: "Data space"
- clean_up: "Clean up"
- api_keys: "Authentification keys for an API REST access"
- counts:
- objects: "Data space elements"
- count: "count"
- validity_out:
- validity_out_time_tables: "Closed timetables"
- validity_out_soon_time_tables: "Timetables closed in %{count} days"
- new:
- title: "Create a new data space"
- submit: "Create a data space"
- actions:
- new: "Add a data space"
- destroy_confirm: "Do you confirm to destroy this data space ?"
- destroy: "Destroy this data space"
- edit: "Edit this data space"
- errors:
- pg_excluded: "can't begins with pg_"
- public_excluded: "public is a reserved value"
- user_excluded: "%{user} is a reserved value"
- activerecord:
- models:
- referential:
- zero: "Data space"
- one: "Data space"
- other: "Data spaces"
- attributes:
- referential:
- name: "Name"
- slug: "Code"
- prefix: "Neptune Object Id prefix"
- projection_type: "Optional spatial reference system code (SRID)"
- time_zone: "time zone"
- upper_corner: "Top,Right corner for default bounding box"
- lower_corner: "Bottom,Left corner for default bounding box"
- resources: "Neptune Import File"
- validity_period: "Validity period"
- no_validity_period: "undefined"
- start_validity_period: "from"
- end_validity_period: "to"
- networks: "Networks"
- group_of_lines: "Group of lines"
- lines: "Lines"
- vehicle_journeys: "Vehicle journeys"
- companies: "Companies"
- stop_areas: "Stop Areas"
- access_points: "Access Points"
- time_tables: "Time tables"
- connection_links: "Connection links"
- quays: "quays"
- boarding_positions: "boarding positions"
- commercial_stops: "commercial stops"
- stop_places: "stop places"
- itls: "routing contraints"
- imports: "Imports"
- exports: "Exports"
- compliance_checks: "Validations"
- rule_parameter_sets: "Rule parameters sets"
- data_format_restrictions: "Data format constraint"
- data_format: "Data format"
- formtastic:
- titles:
- referential:
- slug: "only lowercase alphanumerical or underscore characters, first character must be a letter"
- prefix: "only alphanumerical or underscore characters"
- upper_corner: "latitude,longitude in WGS84 referential, dot for decimal separator"
- lower_corner: "latitude,longitude in WGS84 referential, dot for decimal separator"
-
fr:
referentials:
edit:
@@ -135,6 +57,7 @@ fr:
access_points: "points d'accès"
time_tables: "Calendriers"
connection_links: "Correspondances"
+ route_sections: "Sections de parcours"
quays: "quais"
boarding_positions: "points d'embarquement"
commercial_stops: "arrêts commerciaux"
@@ -144,8 +67,9 @@ fr:
exports: "Exports"
compliance_checks: "Validations"
rule_parameter_sets: "Jeux de paramètres"
- data_format_restrictions: "Appliquer les contraintes format des données"
- data_format: "Format de données"
+ data_format_restrictions: "Format d'export privilégié"
+ data_format: "Format d'export privilégié"
+ timebands: "Créneaux horaires"
formtastic:
titles:
referential:
diff --git a/config/locales/route_sections.en.yml b/config/locales/route_sections.en.yml
new file mode 100644
index 000000000..76fbb790d
--- /dev/null
+++ b/config/locales/route_sections.en.yml
@@ -0,0 +1,48 @@
+en:
+ route_sections:
+ new:
+ title: "Add a new section"
+ show:
+ title: "Show this section"
+ edit:
+ title: "Edit this section"
+ form:
+ no_processing: "Geometry processing"
+ standard_processor: "Standard"
+ no_processor: "No treatment"
+ submit: "Submit"
+ index:
+ title: "Sections course"
+ all_lines: "All lines"
+ actions:
+ show: "Show"
+ edit: "Edit"
+ destroy: "Delete"
+ destroy_confirm: "Are you sure you want to delete this route section?"
+ actions:
+ edit: "Edit this section"
+ destroy: "Delete this section"
+ destroy_confirm: "Are you sure you want to delete this route section?"
+ unable_to_contact_server: 'Unable to contact OSRM server, please try again later.'
+ route_sections_selectors:
+ edit:
+ title: "Changing the course of the mission %{journey_pattern}"
+ route_section:
+ edit: "Edit this section"
+ new: "Add alternative"
+ no_candidate: "No known path"
+ no_selection: "No selection"
+ selection:
+ title: "Selected section"
+ form:
+ title: "Full course"
+ submit: "Change the route"
+ activerecord:
+ models:
+ route_section: "Section course"
+ attributes:
+ route_section:
+ departure: "Departure point"
+ arrival: "Arrival point"
+ points: "Via"
+ distance: "Distance"
diff --git a/config/locales/route_sections.fr.yml b/config/locales/route_sections.fr.yml
new file mode 100644
index 000000000..9d4d3865b
--- /dev/null
+++ b/config/locales/route_sections.fr.yml
@@ -0,0 +1,48 @@
+fr:
+ route_sections:
+ new:
+ title: "Ajouter une section"
+ show:
+ title: "Détails d'une Section de parcours"
+ edit:
+ title: "Modifier une Section de parcours"
+ form:
+ no_processing: "Traitement de la géométrie"
+ standard_processor: "Standard"
+ no_processor: "Pas de traitement"
+ submit: "Valider"
+ index:
+ title: "Sections de parcours"
+ all_lines: "Tous les lignes"
+ actions:
+ show: "Voir"
+ edit: "Modifier"
+ destroy: "Supprimer"
+ destroy_confirm: "Etes vous sûr de vouloir supprimer cette section de parcours ?"
+ actions:
+ edit: "Modifier cette section"
+ destroy: "Supprimer cette section"
+ destroy_confirm: "Etes vous sûr de vouloir supprimer cette section de parcours ?"
+ unable_to_contact_server: "Le serveur OSRM n'est pas disponible pour le moment, merci de réessayer dans quelques instants."
+ route_sections_selectors:
+ edit:
+ title: "Modification du parcours de la mission %{journey_pattern}"
+ route_section:
+ edit: "Modifier cette section"
+ new: "Ajouter une alternative"
+ no_candidate: "Aucun parcours connu"
+ no_selection: "Aucune selection"
+ selection:
+ title: "Section sélectionnée"
+ form:
+ title: "Parcours complet"
+ submit: "Modifier le parcours"
+ activerecord:
+ models:
+ route_section: "Section du parcours"
+ attributes:
+ route_section:
+ departure: "Arrêt de départ"
+ arrival: "Arrêt d'arrivée"
+ points: "Via"
+ distance: "Distance"
diff --git a/config/locales/routes.en.yml b/config/locales/routes.en.yml
new file mode 100644
index 000000000..a3a26cb8c
--- /dev/null
+++ b/config/locales/routes.en.yml
@@ -0,0 +1,82 @@
+en:
+ routes:
+ actions:
+ new: "Add a new route"
+ edit: "Edit this route"
+ edit_boarding_alighting: "Stop alighting and boarding"
+ destroy: "Remove this route"
+ destroy_confirm: "Are you sure you want destroy this route?"
+ export_kml: "Export KML route"
+ export_kml_all: "Export KML routes"
+ export_hub: "Export HUB route"
+ export_hub_all: "Export HUB routes"
+ add_stop_point: "Add stop point"
+ new_stop_point: "Create new stop"
+ new:
+ title: "Add a new route"
+ edit:
+ title: "Update route %{route}"
+ show:
+ title: "Route %{route}"
+ stop_points: "Stop point on route list"
+ journey_patterns: "Route journey patterns list"
+ no_opposite_route: "No reversed route associated"
+ undefined: "Undefined"
+ index:
+ title: "Routes"
+ selection: "Selection"
+ selection_all: "All"
+ edit_boarding_alighting:
+ title: "Stop alighting and boarding properties"
+ stop_area_name: "Stop area name"
+ for_boarding: "Boarding"
+ for_alighting: "Alighting"
+ route:
+ no_journey_pattern: "No Journey pattern"
+ wayback:
+ positive: "forward"
+ negative: "backward"
+ opposite: "Opposite route"
+ no_opposite: "No opposite route"
+ activerecord:
+ models:
+ route:
+ zero: "route"
+ one: "route"
+ other: "routes"
+ attributes:
+ route:
+ wayback:
+ positive: "forward"
+ negative: "backward"
+ line: "Line"
+ vehicle_journeys: "Vehicle journeys"
+ journey_patterns: "Journey patterns"
+ name: "Name"
+ published_name: "Published name"
+ comment: "Comments"
+ number: "Number"
+ direction_code: "Direction"
+ wayback_code: "Wayback"
+ opposite_route: "Reversed route"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by"
+ no_journey_pattern: "No journey pattern"
+ formtastic:
+ titles:
+ route:
+ objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ route:
+ objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ route:
+ objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ route:
+ objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ route:
+ objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 8."
diff --git a/config/locales/routes.yml b/config/locales/routes.fr.yml
index 62b57734c..ea190e6e2 100644
--- a/config/locales/routes.yml
+++ b/config/locales/routes.fr.yml
@@ -1,86 +1,3 @@
-en:
- routes:
- actions:
- new: "Add a new route"
- edit: "Edit this route"
- edit_boarding_alighting: "Stop alighting and boarding"
- destroy: "Remove this route"
- destroy_confirm: "Are you sure you want destroy this route?"
- export_kml: "Export KML route"
- export_kml_all: "Export KML routes"
- export_hub: "Export HUB route"
- export_hub_all: "Export HUB routes"
- add_stop_point: "Add stop point"
- new_stop_point: "Create new stop"
- new:
- title: "Add a new route"
- edit:
- title: "Update route %{route}"
- show:
- title: "Route %{route}"
- stop_points: "Stop point on route list"
- journey_patterns: "Route journey patterns list"
- no_opposite_route: "No reversed route associated"
- undefined: "Undefined"
- index:
- title: "Routes"
- selection: "Selection"
- selection_all: "All"
- edit_boarding_alighting:
- title: "Stop alighting and boarding properties"
- stop_area_name: "Stop area name"
- for_boarding: "Boarding"
- for_alighting: "Alighting"
- route:
- no_journey_pattern: "No Journey pattern"
- wayback:
- positive: "forward"
- negative: "backward"
- opposite: "Opposite route"
- no_opposite: "No opposite route"
- activerecord:
- models:
- route:
- zero: "route"
- one: "route"
- other: "routes"
- attributes:
- route:
- wayback:
- positive: "forward"
- negative: "backward"
- line: "Line"
- vehicle_journeys: "Vehicle journeys"
- journey_patterns: "Journey patterns"
- name: "Name"
- published_name: "Published name"
- comment: "Comments"
- number: "Number"
- direction_code: "Direction"
- wayback_code: "Wayback"
- opposite_route: "Reversed route"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by"
- no_journey_pattern: "No journey pattern"
- formtastic:
- titles:
- route:
- objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- neptune:
- route:
- objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- netex:
- route:
- objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- gtfs:
- route:
- objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- hub:
- route:
- objectid: "[prefix]:Route:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 8."
-
fr:
routes:
actions:
@@ -101,8 +18,8 @@ fr:
title: "Modifier la séquence d'arrêts %{route}"
show:
title: "Séquence d'arrêts %{route} de la ligne %{line}"
- stop_points: "Liste des arrêts de la séquence d'arrêts"
- journey_patterns: "Liste des missions"
+ stop_points: "Liste des arrêts de la séquence d'arrêts"
+ journey_patterns: "Liste des missions"
no_opposite_route: "Aucune séquence d'arrêts associée en sens opposé"
undefined: "Non défini"
index:
@@ -116,27 +33,27 @@ fr:
for_alighting: "Descente"
route:
no_journey_pattern: "Pas de mission"
- wayback:
+ wayback:
positive: "Aller"
negative: "Retour"
opposite: "Séquence opposée"
no_opposite: "Pas de séquence opposée"
- activerecord:
- models:
- route:
+ activerecord:
+ models:
+ route:
zero: "séquence d'arrêts"
one: "séquence d'arrêts"
other: "séquences d'arrêts"
attributes:
route:
- wayback:
+ wayback:
positive: "Aller"
negative: "Retour"
line: "Ligne"
vehicle_journeys: "Courses"
journey_patterns: "Missions"
name: "Nom"
- published_name: "Nom public"
+ published_name: "Nom public"
number: "Indice"
comment: "Commentaire"
direction_code: "Direction"
@@ -163,5 +80,3 @@ fr:
hub:
route:
objectid: "[prefixe]:Route:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 8."
-
-
diff --git a/config/locales/rule_parameter_sets.en.yml b/config/locales/rule_parameter_sets.en.yml
new file mode 100644
index 000000000..814e97f1d
--- /dev/null
+++ b/config/locales/rule_parameter_sets.en.yml
@@ -0,0 +1,78 @@
+en:
+ rule_parameter_sets:
+ actions:
+ new: "Add a new parameter set"
+ edit: "Edit this parameter set"
+ index: "Rule parameter sets"
+ destroy: "Remove this rule parameter set"
+ destroy_confirm: "Are you sure you want destroy this rule parameter set ?"
+ new:
+ title: "Add a new parameter set"
+ destroy:
+ last_rps_protected: "Delete refused. Last rule parameter set in current referential can't be destroyed."
+ edit:
+ title: "Update parameter set %{rule_parameter_set}"
+ form:
+ add_mode_parameter_set: "Add mode specific parameter set"
+ show:
+ title: "Parameter Set %{rule_parameter_set}"
+ max_distance: "Maximum distance between "
+ min_distance: "Minimum distance between "
+ walk_speed: "Maximum walk speed for travellers"
+ inter_stop_area_distance_min: "2 stop areas having different parent"
+ parent_stop_area_distance_max: "a stop area and its own parent"
+ inter_access_point_distance_min: "2 access with different names on a same stop area"
+ inter_connection_link_distance_max: "stop areas in a connection link"
+ walk_default_speed_max: "a regular one"
+ walk_occasional_traveller_speed_max: "an occasional one"
+ walk_frequent_traveller_speed_max: "a frequent one"
+ walk_mobility_restricted_traveller_speed_max: "a mobility restricted one"
+ inter_access_link_distance_max: "an access point and a linked stop area"
+ inter_stop_duration_max: "Maximum duration between the moment when a vehicle is arriving at a stop and the moment when the vehicle is leaving"
+ facility_stop_area_distance_max: "a stop area and a facility"
+ rule_parameter_by_mode: "Parameters by mode"
+ modes_allowed: " (only for allowed ones)"
+ index:
+ title: "Parameter sets"
+ labels:
+ columns_restrictions: "Check model objects atributes"
+ attribute: "attribute"
+ free_char: "free"
+ num_char: "number only"
+ alpha_char: "character only"
+ lower_char: "lowercase only"
+ upper_char: "uppercase only"
+ activerecord:
+ models:
+ rule_parameter_set: "Parameter Set for Conformity Rules"
+ attributes:
+ rule_parameter_set:
+ name: "Name"
+ inter_stop_area_distance_min: "Minimum distance between 2 stop areas having different parent"
+ parent_stop_area_distance_max: "Maximum distance between a stop area and its own parent"
+ stop_areas_area: "Geographic stop area envelop"
+ inter_access_point_distance_min: "Minimum distance between 2 access having different name for a commun stop area"
+ inter_connection_link_distance_max: "Maximum distance between stop area departure and stop area arrival in a connection link"
+ walk_default_speed_max: "Maximum walk speed for a regular traveller"
+ walk_occasional_traveller_speed_max: "Maximum walk speed for an occasional traveller"
+ walk_frequent_traveller_speed_max: "Maximum walk speed for a frequent traveller"
+ walk_mobility_restricted_traveller_speed_max: "Maximum walk speed for a mobility restricted traveller"
+ inter_access_link_distance_max: "Access link maximum distance"
+ inter_stop_duration_max: "Maximum duration for a stopping time"
+ facility_stop_area_distance_max: "Maximum distance between a stop area and a facility"
+ inter_stop_area_distance_min: "Maximum distance between 2 stop areas"
+ inter_stop_area_distance_max: "Maximum distance between 2 stop areas"
+ speed_min: "Minimum speed"
+ speed_max: "Maximum speed"
+ inter_stop_duration_variation_max: "Maximum duration gap between 2 vehicle journeys and between 2 following stops"
+ check_lines_in_groups: "check if each line belongs scrictly to one group of line"
+ check_line_routes: "check if each line have 1 route or 2 routes coupled"
+ check_stop_parent: "check if all physical stop areas are owned by a commercial stop point"
+ check_connection_link_on_physical: "check if connection links connect only physical stops"
+ check_allowed_transport_modes: "Check transport modes"
+ allowed_transport: "Allowed"
+ attribute: "attribute"
+ unique: "uniqness"
+ string_type: "allowed characters"
+ min_size: "minimal size or value"
+ max_size: "maximal size or value"
diff --git a/config/locales/rule_parameter_sets.yml b/config/locales/rule_parameter_sets.fr.yml
index 1205eb785..488710a52 100644
--- a/config/locales/rule_parameter_sets.yml
+++ b/config/locales/rule_parameter_sets.fr.yml
@@ -1,82 +1,3 @@
-en:
- rule_parameter_sets:
- actions:
- new: "Add a new parameter set"
- edit: "Edit this parameter set"
- index: "Rule parameter sets"
- destroy: "Remove this rule parameter set"
- destroy_confirm: "Are you sure you want destroy this rule parameter set ?"
- new:
- title: "Add a new parameter set"
- destroy:
- last_rps_protected: "Delete refused. Last rule parameter set in current referential can't be destroyed."
- edit:
- title: "Update parameter set %{rule_parameter_set}"
- form:
- add_mode_parameter_set: "Add mode specific parameter set"
- show:
- title: "Parameter Set %{rule_parameter_set}"
- max_distance: "Maximum distance between "
- min_distance: "Minimum distance between "
- walk_speed: "Maximum walk speed for travellers"
- inter_stop_area_distance_min: "2 stop areas having different parent"
- parent_stop_area_distance_max: "a stop area and its own parent"
- inter_access_point_distance_min: "2 access with different names on a same stop area"
- inter_connection_link_distance_max: "stop areas in a connection link"
- walk_default_speed_max: "a regular one"
- walk_occasional_traveller_speed_max: "an occasional one"
- walk_frequent_traveller_speed_max: "a frequent one"
- walk_mobility_restricted_traveller_speed_max: "a mobility restricted one"
- inter_access_link_distance_max: "an access point and a linked stop area"
- inter_stop_duration_max: "Maximum duration between the moment when a vehicle is arriving at a stop and the moment when the vehicle is leaving"
- facility_stop_area_distance_max: "a stop area and a facility"
- rule_parameter_by_mode: "Parameters by mode"
- modes_allowed: " (only for allowed ones)"
- index:
- title: "Parameter sets"
- labels:
- columns_restrictions: "Check model objects atributes"
- attribute: "attribute"
- free_char: "free"
- num_char: "number only"
- alpha_char: "character only"
- lower_char: "lowercase only"
- upper_char: "uppercase only"
- activerecord:
- models:
- rule_parameter_set: "Parameter Set for Conformity Rules"
- attributes:
- rule_parameter_set:
- name: "Name"
- inter_stop_area_distance_min: "Minimum distance between 2 stop areas having different parent"
- parent_stop_area_distance_max: "Maximum distance between a stop area and its own parent"
- stop_areas_area: "Geographic stop area envelop"
- inter_access_point_distance_min: "Minimum distance between 2 access having different name for a commun stop area"
- inter_connection_link_distance_max: "Maximum distance between stop area departure and stop area arrival in a connection link"
- walk_default_speed_max: "Maximum walk speed for a regular traveller"
- walk_occasional_traveller_speed_max: "Maximum walk speed for an occasional traveller"
- walk_frequent_traveller_speed_max: "Maximum walk speed for a frequent traveller"
- walk_mobility_restricted_traveller_speed_max: "Maximum walk speed for a mobility restricted traveller"
- inter_access_link_distance_max: "Access link maximum distance"
- inter_stop_duration_max: "Maximum duration for a stopping time"
- facility_stop_area_distance_max: "Maximum distance between a stop area and a facility"
- inter_stop_area_distance_min: "Maximum distance between 2 stop areas"
- inter_stop_area_distance_max: "Maximum distance between 2 stop areas"
- speed_min: "Minimum speed"
- speed_max: "Maximum speed"
- inter_stop_duration_variation_max: "Maximum duration gap between 2 vehicle journeys and between 2 following stops"
- check_lines_in_groups: "check if each line belongs scrictly to one group of line"
- check_line_routes: "check if each line have 1 route or 2 routes coupled"
- check_stop_parent: "check if all physical stop areas are owned by a commercial stop point"
- check_connection_link_on_physical: "check if connection links connect only physical stops"
- check_allowed_transport_modes: "Check transport modes"
- allowed_transport: "Allowed"
- attribute: "attribute"
- unique: "uniqness"
- string_type: "allowed characters"
- min_size: "minimal size or value"
- max_size: "maximal size or value"
-
fr:
rule_parameter_sets:
actions:
@@ -155,4 +76,3 @@ fr:
string_type: "caractères autorisés"
min_size: "taille ou valeur minimale"
max_size: "taille ou valeur maximale"
-
diff --git a/config/locales/source_types.en.yml b/config/locales/source_types.en.yml
new file mode 100644
index 000000000..1cea5ed2c
--- /dev/null
+++ b/config/locales/source_types.en.yml
@@ -0,0 +1,13 @@
+en:
+ source_types:
+ name: "Source type"
+ label:
+ public_and_private_utilities: "public and private utilities"
+ road_authorities: "road authorities"
+ transit_operator: "transit operator"
+ public_transport: "public transport"
+ passenger_transport_coordinating_authority: "passenger transport coordinating authority"
+ travel_information_service_provider: "travel information service provider"
+ travel_agency: "travel_agency"
+ individual_subject_of_travel_itinerary: "individual subject of travel itinerary"
+ other_information: "other information"
diff --git a/config/locales/source_types.fr.yml b/config/locales/source_types.fr.yml
new file mode 100644
index 000000000..6979a14b7
--- /dev/null
+++ b/config/locales/source_types.fr.yml
@@ -0,0 +1,13 @@
+fr:
+ source_types:
+ name: "Type de source"
+ label:
+ public_and_private_utilities: "Service public ou privé"
+ road_authorities: "Autorité routière"
+ transit_operator: "Exploitant de transport public"
+ public_transport: "Transport public"
+ passenger_transport_coordinating_authority: "Autorité organisatrice de transport public"
+ travel_information_service_provider: "Opérateur de voyage (voyagiste/tour operator ...)"
+ travel_agency: "Agence de voyage"
+ individual_subject_of_travel_itinerary: "Voyageur individuel"
+ other_information: "Autre source d'information"
diff --git a/config/locales/stop_area_copies.en.yml b/config/locales/stop_area_copies.en.yml
new file mode 100644
index 000000000..0e9053bae
--- /dev/null
+++ b/config/locales/stop_area_copies.en.yml
@@ -0,0 +1,14 @@
+en:
+ stop_area_copies:
+ new:
+ success: "Clone succedeed"
+ title:
+ child: "Clone as child"
+ parent: "Clone as parent"
+ errors:
+ copy_aborted: "Errors prohibited this copy from completing: "
+ exception: "internal error"
+ activemodel:
+ attributes:
+ stop_area_copy:
+ area_type: "Area type"
diff --git a/config/locales/stop_area_copies.fr.yml b/config/locales/stop_area_copies.fr.yml
new file mode 100644
index 000000000..55543cfb3
--- /dev/null
+++ b/config/locales/stop_area_copies.fr.yml
@@ -0,0 +1,14 @@
+fr:
+ stop_area_copies:
+ new:
+ success: "Clonage réussi"
+ title:
+ child: "Cloner pour créer un fils"
+ parent: "Cloner pour créer un père"
+ errors:
+ copy_aborted: "Des erreurs ont empéchées le bon déroulement de la copie: "
+ exception: "erreur interne"
+ activemodel:
+ attributes:
+ stop_area_copy:
+ area_type: "Type d'arrêt"
diff --git a/config/locales/stop_area_copies.yml b/config/locales/stop_area_copies.yml
deleted file mode 100644
index 9a50c2d48..000000000
--- a/config/locales/stop_area_copies.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-en:
- stop_area_copies:
- new:
- success: "Clone succedeed"
- title:
- child: "Clone as child"
- parent: "Clone as parent"
- errors:
- copy_aborted: "Errors prohibited this copy from completing: "
- exception: "internal error"
- activemodel:
- attributes:
- stop_area_copy:
- area_type: "Area type"
-fr:
- stop_area_copies:
- new:
- success: "Clonage réussi"
- title:
- child: "Cloner pour créer un fils"
- parent: "Cloner pour créer un père"
- errors:
- copy_aborted: "Des erreurs ont empéchées le bon déroulement de la copie: "
- exception: "erreur interne"
- activemodel:
- attributes:
- stop_area_copy:
- area_type: "Type d'arrêt"
- \ No newline at end of file
diff --git a/config/locales/stop_areas.en.yml b/config/locales/stop_areas.en.yml
new file mode 100644
index 000000000..07aa16502
--- /dev/null
+++ b/config/locales/stop_areas.en.yml
@@ -0,0 +1,167 @@
+en:
+ stop_areas:
+ default_geometry_success: "%{count} modified stop areas"
+ stop_area:
+ no_position: "No Position"
+ no_object: "Nothing"
+ lines: "Lines"
+ address: "Address"
+ general: "General"
+ localisation: "Localisation"
+ accessibility: "Accessibility"
+ actions:
+ new: "Add a new stop"
+ edit: "Edit this stop"
+ destroy: "Remove this stop"
+ destroy_confirm: "Are you sure you want destroy this stop and all of his children ?"
+ select_parent: "Create or modify the relation child -> parent"
+ add_children: "Create or modify the relation parent -> children"
+ clone_as_parent: "Clone as parent"
+ clone_as_child: "Clone as child"
+ manage_access_points: "Manage Access Points"
+ manage_access_links: "Manage Access Links"
+ add_routing_lines: "Manage constraint's lines"
+ add_routing_stops: "Manage constraint's stops"
+ default_geometry: "Compute missing geometries"
+ export_kml_place: "Export KML places"
+ export_kml_commercial: "Export KML commercial stop points"
+ export_kml_physical: "Export KML physical"
+ export_hub_place: "Export HUB places"
+ export_hub_commercial: "Export HUB commercial stop points"
+ export_hub_physical: "Export HUB physical"
+ new:
+ title: "Add a new stop"
+ form:
+ address: "246 Boulevard Saint-Germain, 75007 Paris"
+ geolocalize: "Pinpoint "
+ edit:
+ title: "Update stop %{stop_area}"
+ show:
+ title: "Stop %{stop_area}"
+ geographic_data: "Geographic data"
+ no_geographic_data: "None"
+ itl_managment: "Routing constraint's links managment"
+ stop_managment: "Parent-child relations"
+ access_managment: "Access Points and Links managment"
+ access_points: "Access Points"
+ not_editable: "Le type d'arrêt est non modifiable"
+ genealogical:
+ genealogical: "Links between stop area"
+ genealogical_routing: "Routing constraint's links"
+ index:
+ title: "Stop areas"
+ name: "Search by name"
+ zip_code: "Zip Code"
+ selection: "Filter on"
+ selection_all: "All"
+ area_type: "Area Type"
+ advanced_search: "Advanced Search"
+ access_links:
+ title: "Access links for %{stop_area}'s access"
+ generic_access_links: "Glogal links"
+ detail_access_links: "Specific links"
+ access_link_legend_1: "grays arrows for undefined links, green for defined ones"
+ access_link_legend_2: "clic on arrows to create/edit a link"
+ select_parent:
+ title: "Manage parent of stop area %{stop_area}"
+ add_children:
+ title: "Manage children of stop area %{stop_area}"
+ add_lines:
+ title: "Manage lines of routing constraint %{stop_area}"
+ add_stops:
+ title: "Manage stop areas of routing constraint %{stop_area}"
+ activerecord:
+ models:
+ stop_area:
+ zero: "stop area"
+ one: "stop area"
+ other: "stop areas"
+ attributes:
+ stop_area:
+ name: "Name"
+ registration_number: "Registration number"
+ comment: "Comments"
+ stop_area_type: "Area type"
+ nearest_topic_name: "Nearest point of interest"
+ street_name: "Street name"
+ country_code: "INSEE code"
+ fare_code: "Fare code"
+ mobility_restricted_suitability: "Mobility reduced passenger suitable"
+ stairs_availability: "Escalator"
+ lift_availability: "Lift"
+ projection: "Projection type"
+ projection_x: "x-position"
+ projection_y: "y-position"
+ projection_xy: "position (x,y) %{projection}"
+ long_lat_type: "Projection type"
+ longitude: "Longitude"
+ latitude: "Latitude"
+ time_zone: "Time zone"
+ url: "Web page"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creatorid: "Created by"
+ children_ids: "Children"
+ routing_stop_ids: "Attached stops"
+ routing_line_ids: "Attached lines"
+ parent: "Parent"
+ coordinates: "Coordinates (lat,lng) WGS84"
+ zip_code: "Zip code"
+ city_name: "City"
+ formtastic:
+ titles:
+ stop_area:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
+ projection_xy: "x,y in secondary referential, dot for decimal separator"
+ neptune:
+ stop_area:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
+ projection_xy: "x,y in secondary referential, dot for decimal separator"
+ netex:
+ stop_area:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
+ projection_xy: "x,y in secondary referential, dot for decimal separator"
+ gtfs:
+ stop_area:
+ name: ""
+ registration_number: "only alphanumerical or underscore characters"
+ objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
+ projection_xy: "x,y in secondary referential, dot for decimal separator"
+ hub:
+ stop_area:
+ name: "Maximum length = 255."
+ registration_number: "Positif integer, unique key, of no more than 8 digits. Mandatory for physical stops."
+ objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 12."
+ nearest_topic_name: "Maximum length = 255 for logical stops and 60 for physical stops."
+ city_name: "Mandatory for physical stops. Maximum length = 75."
+ zip_code: "Positif integer 5 digits. Mandatory for physical stops."
+ comment: "Maximum length = 255."
+ coordinates: "Coordinates are mandatory."
+ projection_xy: "x,y in secondary referential, dot for decimal separator"
diff --git a/config/locales/stop_areas.fr.yml b/config/locales/stop_areas.fr.yml
new file mode 100644
index 000000000..1cfc66937
--- /dev/null
+++ b/config/locales/stop_areas.fr.yml
@@ -0,0 +1,168 @@
+fr:
+ stop_areas:
+ default_geometry_success: "%{count} arrêts modifiés"
+ stop_area:
+ no_position: "Pas de position"
+ no_object: "Aucun(e)"
+ lines: "Lignes"
+ address: "Adresse"
+ general: "General"
+ localisation: "Localisation"
+ accessibility: "Accessibilité"
+ actions:
+ new: "Ajouter un arrêt"
+ edit: "Modifier cet arrêt"
+ destroy: "Supprimer cet arrêt"
+ destroy_confirm: "Etes vous sûr de supprimer cet arrêt ainsi que tous ses fils?"
+ select_parent: "Créer ou modifier la relation enfant -> parent"
+ add_children: "Créer ou modifier la relation parent -> enfants"
+ clone_as_parent: "Cloner pour créer un père"
+ clone_as_child: "Cloner pour créer un enfant"
+ add_routing_lines: "Gérer les lignes de l'ITL"
+ add_routing_stops: "Gérer les arrêts de l'ITL"
+ manage_access_points: "Gérer les accès"
+ manage_access_links: "Gérer les liens arrêt-accès"
+ default_geometry: "Calculer les géométries manquantes"
+ export_kml_place: "Export KML des pôles d'échange"
+ export_kml_commercial: "Export KML des arrêts commerciaux"
+ export_kml_physical: "Export KML des arrêts physiques"
+ export_hub_place: "Export HUB des pôles d'échange"
+ export_hub_commercial: "Export HUB des arrêts commerciaux"
+ export_hub_physical: "Export HUB des arrêts physiques"
+ new:
+ title: "Ajouter un arrêt"
+ form:
+ address: "246 Boulevard Saint-Germain, 75007 Paris"
+ geolocalize: "Géolocalisez "
+ edit:
+ title: "Modifier l'arrêt %{stop_area}"
+ show:
+ title: "Arrêt %{stop_area}"
+ geographic_data: "Données géographiques"
+ no_geographic_data: "Aucune"
+ itl_managment: "Gestion des liens de l'ITL"
+ stop_managment: "Relations parent-enfant"
+ access_managment: "Gestion des accès et liens associés"
+ access_points: "Points d'accès"
+ not_editable: "Le type d'arrêt est non modifiable"
+ genealogical:
+ genealogical: "Lien entre arrêts"
+ genealogical_routing: "Liens de l'ITL"
+ access_links:
+ title: "Liens Accès-Arrêts des accès de %{stop_area}"
+ generic_access_links: "Liens globaux"
+ detail_access_links: "Liens détaillés"
+ access_link_legend_1: "Les flêches grises représentent des liens non définis"
+ access_link_legend_2: "cliquer sur les flêches pour créer/éditer un lien"
+ index:
+ name: "Recherche par nom"
+ zip_code: "Code Postal"
+ title: "Arrêts"
+ selection: "Filtrer sur"
+ selection_all: "Tous"
+ area_type: "Type d'arrêt"
+ advanced_search: "Recherche avancée"
+ select_parent:
+ title: "Gérer le parent de l'arrêt %{stop_area}"
+ add_children:
+ title: "Gérer les fils de l'arrêt %{stop_area}"
+ add_routing_lines:
+ title: "Gérer les lignes de l'ITL %{stop_area} "
+ add_routing_stops:
+ title: "Gérer les arrêts de l'ITL %{stop_area} "
+ activerecord:
+ models:
+ stop_area:
+ zero: "arrêt"
+ one: "arrêt"
+ other: "arrêts"
+ attributes:
+ stop_area:
+ name: "Nom"
+ registration_number: "Numéro d'enregistrement"
+ published_name: "Nom public"
+ comment: "Commentaire"
+ stop_area_type: "Type d'arrêt"
+ nearest_topic_name: "Point d'intérêt le plus proche"
+ street_name: "Nom de la rue"
+ country_code: "Code INSEE"
+ fare_code: "Zone tarifaire"
+ mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite"
+ stairs_availability: "Escalator"
+ lift_availability: "Ascenseur"
+ projection: "Projection"
+ projection_x: "Position X"
+ projection_y: "Position Y"
+ projection_xy: "Position (x,y) %{projection}"
+ long_lat_type: "Projection"
+ longitude: "Longitude"
+ latitude: "Latitude"
+ time_zone: "Fuseau horaire"
+ url: "Page web associée"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ children_ids: "Fils"
+ routing_stop_ids: "Arrêts concernés par l'ITL"
+ routing_line_ids: "Lignes affectées par l'ITL"
+ parent: "Parent"
+ coordinates: "Coordonnées (lat,lng) WGS84"
+ zip_code: "Code postal"
+ city_name: "Commune"
+ formtastic:
+ titles:
+ stop_area:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
+ projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
+ neptune:
+ stop_area:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
+ projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
+ netex:
+ stop_area:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
+ projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
+ gtfs:
+ stop_area:
+ name: ""
+ registration_number: "caractères autorisés : alphanumériques et 'souligné'"
+ objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ nearest_topic_name: ""
+ city_name: ""
+ zip_code: ""
+ comment: ""
+ coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
+ projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
+ hub:
+ stop_area:
+ name: "Longueur maximale = 75."
+ registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres. Obligatoire pour les arrêts physiques."
+ objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 12."
+ nearest_topic_name: "Longueur maximale = 255 pour les arrêts logiques et 60 pour les arrêts physiques."
+ city_name: "Obligatoire pour les arrêts physiques. Longueur maximale = 80."
+ zip_code: "Entier positif de 8 chiffres. Obligatoire pour les arrêts physiques."
+ comment: "Longueur maximale = 255."
+ coordinates: "Les coordonnées sont obligatoires."
+ projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
diff --git a/config/locales/stop_areas.yml b/config/locales/stop_areas.yml
deleted file mode 100644
index 227a3dbb6..000000000
--- a/config/locales/stop_areas.yml
+++ /dev/null
@@ -1,337 +0,0 @@
-en:
- stop_areas:
- default_geometry_success: "%{count} modified stop areas"
- stop_area:
- no_position: "No Position"
- no_object: "Nothing"
- lines: "Lines"
- address: "Address"
- general: "General"
- localisation: "Localisation"
- accessibility: "Accessibility"
- actions:
- new: "Add a new stop"
- edit: "Edit this stop"
- destroy: "Remove this stop"
- destroy_confirm: "Are you sure you want destroy this stop and all of his children ?"
- select_parent: "Manage Parent"
- add_children: "Manage Children"
- clone_as_parent: "Clone as parent"
- clone_as_child: "Clone as child"
- manage_access_points: "Manage Access Points"
- manage_access_links: "Manage Access Links"
- add_routing_lines: "Manage constraint's lines"
- add_routing_stops: "Manage constraint's stops"
- default_geometry: "Compute missing geometries"
- export_kml_place: "Export KML places"
- export_kml_commercial: "Export KML commercial stop points"
- export_kml_physical: "Export KML physical"
- export_hub_place: "Export HUB places"
- export_hub_commercial: "Export HUB commercial stop points"
- export_hub_physical: "Export HUB physical"
- new:
- title: "Add a new stop"
- form:
- address: "15 rue du Louvre, Paris"
- geolocalize: "Pinpoint "
- edit:
- title: "Update stop %{stop_area}"
- show:
- title: "Stop %{stop_area}"
- geographic_data: "Geographic data"
- no_geographic_data: "None"
- itl_managment: "Routing constraint's links managment"
- stop_managment: "Parent-Child links managment"
- access_managment: "Access Points and Links managment"
- access_points: "Access Points"
- genealogical:
- genealogical: "Links between stop area"
- genealogical_routing: "Routing constraint's links"
- index:
- title: "Stop areas"
- name: "Search by name"
- zip_code: "Zip Code"
- selection: "Filter on"
- selection_all: "All"
- area_type: "Area Type"
- advanced_search: "Advanced Search"
- access_links:
- title: "Access links for %{stop_area}'s access"
- generic_access_links: "Glogal links"
- detail_access_links: "Specific links"
- access_link_legend_1: "grays arrows for undefined links, green for defined ones"
- access_link_legend_2: "clic on arrows to create/edit a link"
- select_parent:
- title: "Manage parent of stop area %{stop_area}"
- add_children:
- title: "Manage children of stop area %{stop_area}"
- add_lines:
- title: "Manage lines of routing constraint %{stop_area}"
- add_stops:
- title: "Manage stop areas of routing constraint %{stop_area}"
- activerecord:
- models:
- stop_area:
- zero: "stop area"
- one: "stop area"
- other: "stop areas"
- attributes:
- stop_area:
- name: "Name"
- registration_number: "Registration number"
- comment: "Comments"
- stop_area_type: "Area type"
- nearest_topic_name: "Nearest point of interest"
- street_name: "Street name"
- country_code: "INSEE code"
- fare_code: "Fare code"
- mobility_restricted_suitability: "Mobility reduced passenger suitable"
- stairs_availability: "Escalator"
- lift_availability: "Lift"
- projection: "Projection type"
- projection_x: "x-position"
- projection_y: "y-position"
- projection_xy: "position (x,y) %{projection}"
- long_lat_type: "Projection type"
- longitude: "Longitude"
- latitude: "Latitude"
- time_zone: "Time zone"
- url: "Web page"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creatorid: "Created by"
- children_ids: "Children"
- routing_stop_ids: "Attached stops"
- routing_line_ids: "Attached lines"
- parent: "Parent"
- coordinates: "Coordinates (lat,lng) WGS84"
- zip_code: "Zip code"
- city_name: "City"
- formtastic:
- titles:
- stop_area:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
- projection_xy: "x,y in secondary referential, dot for decimal separator"
- neptune:
- stop_area:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
- projection_xy: "x,y in secondary referential, dot for decimal separator"
- netex:
- stop_area:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
- projection_xy: "x,y in secondary referential, dot for decimal separator"
- gtfs:
- stop_area:
- name: "Only alphanumerical or underscore characters."
- registration_number: "only alphanumerical or underscore characters"
- objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude in WGS84 referential, dot for decimal separator"
- projection_xy: "x,y in secondary referential, dot for decimal separator"
- hub:
- stop_area:
- name: "Only alphanumerical or underscore characters. Maximum length = 75."
- registration_number: "Positif integer, unique key, of no more than 8 digits. Mandatory for physical stops."
- objectid: "[prefix]:StopArea:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 12."
- nearest_topic_name: "Only alphanumerical or underscore characters. Maximum length = 255 for logical stops and 60 for physical stops."
- city_name: "Only alphanumerical or underscore characters. Mandatory for physical stops. Maximum length = 75."
- zip_code: "Positif integer 5 digits. Mandatory for physical stops."
- comment: "Only alphanumerical or underscore characters. Maximum length = 255."
- coordinates: "Coordinates are mandatory."
- projection_xy: "x,y in secondary referential, dot for decimal separator"
-
-fr:
- stop_areas:
- default_geometry_success: "%{count} arrêts modifiés"
- stop_area:
- no_position: "Pas de position"
- no_object: "Aucun(e)"
- lines: "Lignes"
- address: "Adresse"
- general: "General"
- localisation: "Localisation"
- accessibility: "Accessibilité"
- actions:
- new: "Ajouter un arrêt"
- edit: "Modifier cet arrêt"
- destroy: "Supprimer cet arrêt"
- destroy_confirm: "Etes vous sûr de supprimer cet arrêt ainsi que tous ses fils?"
- select_parent: "Gérer le parent"
- add_children: "Gérer les fils"
- clone_as_parent: "Cloner pour créer un père"
- clone_as_child: "Cloner pour créer un fils"
- add_routing_lines: "Gérer les lignes de l'ITL"
- add_routing_stops: "Gérer les arrêts de l'ITL"
- manage_access_points: "Gérer les accès"
- manage_access_links: "Gérer les liens arrêt-accès"
- add_children: "Gérer les fils"
- default_geometry: "Calculer les géométries manquantes"
- export_kml_place: "Export KML des pôles d'échange"
- export_kml_commercial: "Export KML des arrêts commerciaux"
- export_kml_physical: "Export KML des arrêts physiques"
- export_hub_place: "Export HUB des pôles d'échange"
- export_hub_commercial: "Export HUB des arrêts commerciaux"
- export_hub_physical: "Export HUB des arrêts physiques"
- new:
- title: "Ajouter un arrêt"
- form:
- address: "15 rue du Louvre, Paris"
- geolocalize: "Géolocalisez "
- edit:
- title: "Modifier l'arrêt %{stop_area}"
- show:
- title: "Arrêt %{stop_area}"
- geographic_data: "Données géographiques"
- no_geographic_data: "Aucune"
- itl_managment: "Gestion des liens de l'ITL"
- stop_managment: "Gestion des relations père-fils"
- access_managment: "Gestion des accès et liens associés"
- access_points: "Points d'accès"
- genealogical:
- genealogical: "Lien entre arrêts"
- genealogical_routing: "Liens de l'ITL"
- access_links:
- title: "Liens Accès-Arrêts des accès de %{stop_area}"
- generic_access_links: "Liens globaux"
- detail_access_links: "Liens détaillés"
- access_link_legend_1: "Les flêches grises représentent des liens non définis"
- access_link_legend_2: "cliquer sur les flêches pour créer/éditer un lien"
- index:
- name: "Recherche par nom"
- zip_code: "Code Postal"
- title: "Arrêts"
- selection: "Filtrer sur"
- selection_all: "Tous"
- area_type: "Type d'arrêt"
- advanced_search: "Recherche avancée"
- select_parent:
- title: "Gérer le parent de l'arrêt %{stop_area}"
- add_children:
- title: "Gérer les fils de l'arrêt %{stop_area}"
- add_routing_lines:
- title: "Gérer les lignes de l'ITL %{stop_area} "
- add_routing_stops:
- title: "Gérer les arrêts de l'ITL %{stop_area} "
- activerecord:
- models:
- stop_area:
- zero: "arrêt"
- one: "arrêt"
- other: "arrêts"
- attributes:
- stop_area:
- name: "Nom"
- registration_number: "Numéro d'enregistrement"
- published_name: "Nom public"
- comment: "Commentaire"
- stop_area_type: "Type d'arrêt"
- nearest_topic_name: "Point d'intérêt le plus proche"
- street_name: "Nom de la rue"
- country_code: "Code INSEE"
- fare_code: "Zone tarifaire"
- mobility_restricted_suitability: "Accès pour voyageur à mobilité réduite"
- stairs_availability: "Escalator"
- lift_availability: "Ascenseur"
- projection: "Projection"
- projection_x: "Position X"
- projection_y: "Position Y"
- projection_xy: "Position (x,y) %{projection}"
- long_lat_type: "Projection"
- longitude: "Longitude"
- latitude: "Latitude"
- time_zone: "Fuseau horaire"
- url: "Page web associée"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- children_ids: "Fils"
- routing_stop_ids: "Arrêts concernés par l'ITL"
- routing_line_ids: "Lignes affectées par l'ITL"
- parent: "Parent"
- coordinates: "Coordonnées (lat,lng) WGS84"
- zip_code: "Code postal"
- city_name: "Commune"
- formtastic:
- titles:
- stop_area:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
- projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
- neptune:
- stop_area:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
- projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
- netex:
- stop_area:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
- projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
- gtfs:
- stop_area:
- name: "Caractères autorisés : alphanumériques et 'souligné'."
- registration_number: "caractères autorisés : alphanumériques et 'souligné'"
- objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- nearest_topic_name: ""
- city_name: ""
- zip_code: ""
- comment: ""
- coordinates: "latitude,longitude dans le référentiel WGS84, le séparateur de décimales est 'point'"
- projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
- hub:
- stop_area:
- name: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 75."
- registration_number: "Entier positif, clé unique, d'un maximum de 8 chiffres. Obligatoire pour les arrêts physiques."
- objectid: "[prefixe]:StopArea:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 12."
- nearest_topic_name: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 255 pour les arrêts logiques et 60 pour les arrêts physiques."
- city_name: "Caractères autorisés : alphanumériques et 'souligné'. Obligatoire pour les arrêts physiques. Longueur maximale = 80."
- zip_code: "Entier positif de 8 chiffres. Obligatoire pour les arrêts physiques."
- comment: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 255."
- coordinates: "Les coordonnées sont obligatoires."
- projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
-
-
diff --git a/config/locales/stop_points.en.yml b/config/locales/stop_points.en.yml
new file mode 100644
index 000000000..7221eaef5
--- /dev/null
+++ b/config/locales/stop_points.en.yml
@@ -0,0 +1,40 @@
+en:
+ stop_points:
+ reorder_success: "Stop list saved"
+ reorder_failure: "Fail in reordering"
+ actions:
+ sort: "Manage stops on route"
+ show: "Show"
+ index: "Stops on route list"
+ new: "Add a new stop on route"
+ edit: "Edit this stop on route"
+ destroy: "Remove this stop on route"
+ destroy_confirm: "Are you sure you want destroy this stop on route ?"
+ new:
+ title: "Add a new stop route"
+ select_area: "Select a stop area"
+ index:
+ reorder_button: "Save reordering"
+ title: "Stops on route %{route}"
+ subtitle: "Stops on route ordered"
+ move: "Move"
+ no_stop_point: "No stop point on route"
+ stop_point:
+ no_position: "No position"
+ no_object: "Nothing"
+ lines: "Lines"
+ address: "Address"
+ activerecord:
+ models:
+ stop_point:
+ zero: "stop point on route"
+ one: "stop point on route"
+ other: "stop points on route"
+ attributes:
+ stop_point:
+ lines: "lines"
+ simple_form:
+ labels:
+ stop_point:
+ for_boarding: "Pickup"
+ for_alighting: "Drop off"
diff --git a/config/locales/stop_points.yml b/config/locales/stop_points.fr.yml
index 819ed4c0f..c2516bc63 100644
--- a/config/locales/stop_points.yml
+++ b/config/locales/stop_points.fr.yml
@@ -1,43 +1,3 @@
-en:
- stop_points:
- reorder_success: "Stop list saved"
- reorder_failure: "Fail in reordering"
- actions:
- sort: "Manage stops on route"
- show: "Show"
- index: "Stops on route list"
- new: "Add a new stop on route"
- edit: "Edit this stop on route"
- destroy: "Remove this stop on route"
- destroy_confirm: "Are you sure you want destroy this stop on route ?"
- new:
- title: "Add a new stop route"
- select_area: "Select a stop area"
- index:
- reorder_button: "Save reordering"
- title: "Stops on route %{route}"
- subtitle: "Stops on route ordered"
- move: "Move"
- no_stop_point: "No stop point on route"
- stop_point:
- no_position: "No position"
- no_object: "Nothing"
- lines: "Lines"
- address: "Address"
- activerecord:
- models:
- stop_point:
- zero: "stop point on route"
- one: "stop point on route"
- other: "stop points on route"
- attributes:
- stop_point:
- lines: "lines"
- simple_form:
- labels:
- stop_point:
- for_boarding: "Pickup"
- for_alighting: "Drop off"
fr:
stop_points:
reorder_success: "La list des arrêts a été mise à jour"
@@ -64,9 +24,9 @@ fr:
no_object: "Aucun(e)"
lines: "Lignes"
address: "Adresse"
- activerecord:
- models:
- stop_point:
+ activerecord:
+ models:
+ stop_point:
zero: "arrêt sur séquence d'arrêts"
one: "arrêt sur séquence d'arrêts"
other: "arrêts sur séquence d'arrêts"
@@ -77,4 +37,4 @@ fr:
labels:
stop_point:
for_boarding: "Montée"
- for_alighting: "Descente"
+ for_alighting: "Descente"
diff --git a/config/locales/subscriptions.en.yml b/config/locales/subscriptions.en.yml
new file mode 100644
index 000000000..95f7bd160
--- /dev/null
+++ b/config/locales/subscriptions.en.yml
@@ -0,0 +1,17 @@
+en:
+ subscriptions:
+ success: "Subscription saved"
+ failure: "Invalide subscription"
+ new:
+ title: "Create your account"
+ actions:
+ new: "Create an account"
+ activemodel:
+ attributes:
+ subscription:
+ organisation_name: "Organisation"
+ user_name: "User full name"
+ email: "Email address"
+ password: "Password"
+ password_confirmation: "Password confirmation"
+ current_password: "Actual password"
diff --git a/config/locales/subscriptions.yml b/config/locales/subscriptions.fr.yml
index efade4c53..b33fd49ef 100644
--- a/config/locales/subscriptions.yml
+++ b/config/locales/subscriptions.fr.yml
@@ -1,20 +1,3 @@
-en:
- subscriptions:
- success: "Subscription saved"
- failure: "Invalide subscription"
- new:
- title: "Create your account"
- actions:
- new: "Create an account"
- activemodel:
- attributes:
- subscription:
- organisation_name: "Organisation"
- user_name: "User full name"
- email: "Email address"
- password: "Password"
- password_confirmation: "Password confirmation"
- current_password: "Actual password"
fr:
subscriptions:
success: "Inscription enregistrée"
@@ -24,7 +7,7 @@ fr:
actions:
new: "Créer un compte"
activemodel:
- models:
+ models:
subscription: "compte"
attributes:
subscription:
diff --git a/config/locales/time_table_combinations.en.yml b/config/locales/time_table_combinations.en.yml
new file mode 100644
index 000000000..e7bf9d90e
--- /dev/null
+++ b/config/locales/time_table_combinations.en.yml
@@ -0,0 +1,15 @@
+en:
+ time_table_combinations:
+ success: "operation applied on timetable"
+ failure: "operation failed on timetable"
+ operations:
+ union: "merge"
+ intersection: "intersect"
+ disjunction: "disjoin"
+ combine_form:
+ time_tables: "Time table to combine with"
+ activemodel:
+ attributes:
+ time_table_combination:
+ combined_id: "Time table id"
+ operation: "operation"
diff --git a/config/locales/time_table_combinations.yml b/config/locales/time_table_combinations.fr.yml
index a544b0115..562c7b58d 100644
--- a/config/locales/time_table_combinations.yml
+++ b/config/locales/time_table_combinations.fr.yml
@@ -1,18 +1,3 @@
-en:
- time_table_combinations:
- success: "operation applied on timetable"
- failure: "operation failed on timetable"
- operations:
- union: "merge"
- intersection: "intersect"
- disjunction: "disjoin"
- combine_form:
- time_tables: "Time table to combine with"
- activemodel:
- attributes:
- time_table_combination:
- combined_id: "Time table id"
- operation: "operation"
fr:
time_table_combinations:
success: "opération appliquée sur le calendrier"
@@ -28,4 +13,3 @@ fr:
time_table_combination:
combined_id: "Id Calendrier"
operation: "opération"
-
diff --git a/config/locales/time_tables.en.yml b/config/locales/time_tables.en.yml
new file mode 100644
index 000000000..b25439a1b
--- /dev/null
+++ b/config/locales/time_tables.en.yml
@@ -0,0 +1,107 @@
+en:
+ time_tables:
+ duplicate_success: "duplication succeded"
+ time_table:
+ empty: "empty"
+ bounding: "from %{start} to %{end}"
+ periods_count: "periods: %{count}"
+ dates_count: "dates: %{count}"
+ periods_dates_count: "dates: %{dates_count}, periods: %{periods_count}"
+ actions:
+ new: "Add a new timetable"
+ edit: "Edit this timetable"
+ destroy: "Remove this timetable"
+ duplicate: "Duplicate this timetable"
+ combine: "Combine with another timetable"
+ destroy_confirm: "Are you sure you want destroy this timetable ?"
+ destroy_date_confirm: "Are you sure you want destroy this date ?"
+ destroy_period_confirm: "Are you sure you want destroy this period ?"
+ add_period: "Add a period"
+ add_date: "Add a peculiar date"
+ add_excluded_date: "Add an excluded date"
+ new:
+ title: "Add a new timetable"
+ edit:
+ title: "Update timetable %{time_table}"
+ show:
+ title: "Timetable %{time_table}"
+ dates: "Application dates"
+ periods: "Application periods"
+ from: "from"
+ to: "to"
+ add_period: "Add a period"
+ add_date: "Add a date"
+ combine_form: "Combinations"
+ combine: "Apply"
+ show_time_table:
+ resume: "From %{start_date} to %{end_date}"
+ resume_empty: "Empty timetable"
+ legend: "Legend : "
+ excluded_date: "Excluded date"
+ overlap_date: "Overlap date"
+ selected_date: "Date directly included"
+ selected_period: "Date included in period"
+ index:
+ title: "Timetables"
+ comment: "Search by name"
+ tag_search: "Tags : hollidays,public holliday"
+ from: "From : "
+ to: " to : "
+ selection: "Selection"
+ selection_all: "All"
+ advanced_search: "Advanced Search"
+ activerecord:
+ models:
+ time_table:
+ zero: "timetable"
+ one: "timetable"
+ other: "timetables"
+ attributes:
+ time_table:
+ comment: "Name"
+ version: "Short name"
+ day_types: "Period day types"
+ none: "none"
+ monday: "Monday"
+ tuesday: "Tuesday"
+ wednesday: "Wednesday"
+ thursday: "Thursday"
+ friday: "Friday"
+ saturday: "Saturday"
+ sunday: "Sunday"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by "
+ calendars: "Calendar view"
+ dates: "Peculiar dates"
+ date: "On"
+ excluded_dates: "Excluded dates"
+ periods: "Application periods"
+ period_start: "From"
+ period_end: "to"
+ tag_search: "Tags"
+ formtastic:
+ titles:
+ time_table:
+ comment: ""
+ objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ time_table:
+ comment: ""
+ objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ time_table:
+ comment: ""
+ objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ time_table:
+ comment: ""
+ objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ time_table:
+ comment: "Maximum length = 75."
+ objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 6."
+ placeholders:
+ time_table:
+ tag_search: "ex: Public hollidays,School holidays"
diff --git a/config/locales/time_tables.fr.yml b/config/locales/time_tables.fr.yml
new file mode 100644
index 000000000..b1c9998dc
--- /dev/null
+++ b/config/locales/time_tables.fr.yml
@@ -0,0 +1,111 @@
+fr:
+ time_tables:
+ duplicate_success: "duplication terminée"
+ time_table:
+ empty: "vide"
+ bounding: "du %{start} au %{end}"
+ periods_count: "périodes: %{count}"
+ dates_count: "dates: %{count}"
+ periods_dates_count: "dates: %{dates_count}, périodes: %{periods_count}"
+ actions:
+ new: "Ajouter un calendrier"
+ edit: "Modifier ce calendrier"
+ destroy: "Supprimer ce calendrier"
+ duplicate: "Dupliquer ce calendrier"
+ combine: "Combiner ce calendrier"
+ destroy_confirm: "Etes vous sûr de supprimer ce calendrier ?"
+ destroy_date_confirm: "Etes vous sûr de supprimer cette date ?"
+ destroy_period_confirm: "Etes vous sûr de supprimer cette période ?"
+ add_period: "Ajouter une période"
+ add_date: "Ajouter une date particulière"
+ add_excluded_date: "Ajouter une date exclue"
+ new:
+ title: "Ajouter un calendrier"
+ edit:
+ title: "Modifier le calendrier %{time_table}"
+ show:
+ title: Calendrier %{time_table}
+ dates: "Dates d'application"
+ periods: "Périodes d'application"
+ from: "du"
+ to: "au"
+ add_period: "Ajouter une période"
+ add_date: "Ajouter une date"
+ combine_form: "Combinaison de calendriers"
+ combine: "Appliquer"
+ show_time_table:
+ resume: "Validité comprise du %{start_date} au %{end_date}"
+ resume_empty: "Calendrier vide"
+ legend: "Légende : "
+ excluded_date: "Date exclue"
+ overlap_date: "Date en doublon"
+ selected_date: "Date incluse directement"
+ selected_period: "Date incluse par période"
+ index:
+ comment: "Recherche par nom"
+ tag_search: "Tags : vacances,jour fériés"
+ from: "De : "
+ to: " à : "
+ start_date: "jj/mm/aaaa"
+ end_date: "jj/mm/aaaa"
+ title: "calendriers"
+ selection: "Sélection"
+ selection_all: "Tous"
+ advanced_search: "Recherche avancée"
+ activerecord:
+ models:
+ time_table:
+ zero: "calendrier"
+ one: "calendrier"
+ other: "calendriers"
+ attributes:
+ time_table:
+ comment: "Nom"
+ version: "Abréviation"
+ day_types: "Jours d'application des périodes"
+ none: "aucun"
+ monday: "Lundi"
+ tuesday: "Mardi"
+ wednesday: "Mercredi"
+ thursday: "Jeudi"
+ friday: "Vendredi"
+ saturday: "Samedi"
+ sunday: "Dimanche"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ calendars: "Calendrier"
+ calendar_details: "Données du calendrier"
+ dates: "Dates particulières"
+ date: "Le"
+ excluded_dates: "Dates exclues"
+ periods: "Périodes d'application"
+ period_start: "Du"
+ period_end: "au"
+ tag_search: "Etiquettes"
+ tag_list: "Etiquettes"
+ formtastic:
+ titles:
+ time_table:
+ comment: ""
+ objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ neptune:
+ time_table:
+ comment: ""
+ objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ netex:
+ time_table:
+ comment: ""
+ objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ gtfs:
+ time_table:
+ comment: ""
+ objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ hub:
+ time_table:
+ comment: "Longueur maximale = 75."
+ objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 6."
+ placeholders:
+ time_table:
+ tag_search: "ex: Jours fériés,Vacances scolaires"
diff --git a/config/locales/time_tables.yml b/config/locales/time_tables.yml
deleted file mode 100644
index b0d469297..000000000
--- a/config/locales/time_tables.yml
+++ /dev/null
@@ -1,222 +0,0 @@
-en:
- time_tables:
- duplicate_success: "duplication succeded"
- time_table:
- empty: "empty"
- bounding: "from %{start} to %{end}"
- periods_count: "periods: %{count}"
- dates_count: "dates: %{count}"
- periods_dates_count: "dates: %{dates_count}, periods: %{periods_count}"
- actions:
- new: "Add a new timetable"
- edit: "Edit this timetable"
- destroy: "Remove this timetable"
- duplicate: "Duplicate this timetable"
- combine: "Combine with another timetable"
- destroy_confirm: "Are you sure you want destroy this timetable ?"
- destroy_date_confirm: "Are you sure you want destroy this date ?"
- destroy_period_confirm: "Are you sure you want destroy this period ?"
- add_period: "Add a period"
- add_date: "Add a peculiar date"
- add_excluded_date: "Add an excluded date"
- new:
- title: "Add a new timetable"
- edit:
- title: "Update timetable %{time_table}"
- show:
- title: "Timetable %{time_table}"
- dates: "Application dates"
- periods: "Application periods"
- from: "from"
- to: "to"
- add_period: "Add a period"
- add_date: "Add a date"
- combine_form: "Combinations"
- combine: "Apply"
- show_time_table:
- resume: "From %{start_date} to %{end_date}"
- resume_empty: "Empty timetable"
- legend: "Legend : "
- excluded_date: "Excluded date"
- overlap_date: "Overlap date"
- selected_date: "Date directly included"
- selected_period: "Date included in period"
- index:
- title: "Timetables"
- comment: "Search by name"
- tag_search: "Tags : hollidays,public holliday"
- from: "From : "
- to: " to : "
- selection: "Selection"
- selection_all: "All"
- advanced_search: "Advanced Search"
- activerecord:
- models:
- time_table:
- zero: "timetable"
- one: "timetable"
- other: "timetables"
- attributes:
- time_table:
- comment: "Name"
- version: "Short name"
- day_types: "Period day types"
- none: "none"
- monday: "Monday"
- tuesday: "Tuesday"
- wednesday: "Wednesday"
- thursday: "Thursday"
- friday: "Friday"
- saturday: "Saturday"
- sunday: "Sunday"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by "
- calendars: "Calendar view"
- dates: "Peculiar dates"
- date: "On"
- excluded_dates: "Excluded dates"
- periods: "Application periods"
- period_start: "From"
- period_end: "to"
- tag_search: "Tags"
- formtastic:
- titles:
- time_table:
- comment: "Only alphanumerical or underscore characters."
- objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- neptune:
- time_table:
- comment: "Only alphanumerical or underscore characters."
- objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- netex:
- time_table:
- comment: "Only alphanumerical or underscore characters."
- objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- gtfs:
- time_table:
- comment: "Only alphanumerical or underscore characters."
- objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- hub:
- time_table:
- comment: "Only alphanumerical or underscore characters. Maximum length = 75."
- objectid: "[prefix]:Timetable:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 6."
- placeholders:
- time_table:
- tag_search: "ex: Public hollidays,School holidays"
-
-fr:
- time_tables:
- duplicate_success: "duplication terminée"
- time_table:
- empty: "vide"
- bounding: "du %{start} au %{end}"
- periods_count: "périodes: %{count}"
- dates_count: "dates: %{count}"
- periods_dates_count: "dates: %{dates_count}, périodes: %{periods_count}"
- actions:
- new: "Ajouter un calendrier"
- edit: "Modifier ce calendrier"
- destroy: "Supprimer ce calendrier"
- duplicate: "Dupliquer ce calendrier"
- combine: "Combiner ce calendrier"
- destroy_confirm: "Etes vous sûr de supprimer ce calendrier ?"
- destroy_date_confirm: "Etes vous sûr de supprimer cette date ?"
- destroy_period_confirm: "Etes vous sûr de supprimer cette période ?"
- add_period: "Ajouter une période"
- add_date: "Ajouter une date particulière"
- add_excluded_date: "Ajouter une date exclue"
- new:
- title: "Ajouter un calendrier"
- edit:
- title: "Modifier le calendrier %{time_table}"
- show:
- title: Calendrier %{time_table}
- dates: "Dates d'application"
- periods: "Périodes d'application"
- from: "du"
- to: "au"
- add_period: "Ajouter une période"
- add_date: "Ajouter une date"
- combine_form: "Combinaison de calendriers"
- combine: "Appliquer"
- show_time_table:
- resume: "Validité comprise du %{start_date} au %{end_date}"
- resume_empty: "Calendrier vide"
- legend: "Légende : "
- excluded_date: "Date exclue"
- overlap_date: "Date en doublon"
- selected_date: "Date incluse directement"
- selected_period: "Date incluse par période"
- index:
- comment: "Recherche par nom"
- tag_search: "Tags : vacances,jour fériés"
- from: "De : "
- to: " à : "
- start_date: "jj/mm/aaaa"
- end_date: "jj/mm/aaaa"
- title: "calendriers"
- selection: "Sélection"
- selection_all: "Tous"
- advanced_search: "Recherche avancée"
- activerecord:
- models:
- time_table:
- zero: "calendrier"
- one: "calendrier"
- other: "calendriers"
- attributes:
- time_table:
- comment: "Nom"
- version: "Abréviation"
- day_types: "Jours d'application des périodes"
- none: "aucun"
- monday: "Lundi"
- tuesday: "Mardi"
- wednesday: "Mercredi"
- thursday: "Jeudi"
- friday: "Vendredi"
- saturday: "Samedi"
- sunday: "Dimanche"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- calendars: "Calendrier"
- calendar_details: "Données du calendrier"
- dates: "Dates particulières"
- date: "Le"
- excluded_dates: "Dates exclues"
- periods: "Périodes d'application"
- period_start: "Du"
- period_end: "au"
- tag_search: "Etiquettes"
- tag_list: "Etiquettes"
- formtastic:
- titles:
- time_table:
- comment: "Caractères autorisés : alphanumériques et 'souligné'."
- objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- neptune:
- time_table:
- comment: "Caractères autorisés : alphanumériques et 'souligné'."
- objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- netex:
- time_table:
- comment: "Caractères autorisés : alphanumériques et 'souligné'."
- objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- gtfs:
- time_table:
- comment: "Caractères autorisés : alphanumériques et 'souligné'."
- objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- hub:
- time_table:
- comment: "Caractères autorisés : alphanumériques et 'souligné'. Longueur maximale = 75."
- objectid: "[prefixe]:Timetable:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 6."
- placeholders:
- time_table:
- tag_search: "ex: Jours fériés,Vacances scolaires"
-
-
-
diff --git a/config/locales/timebands.en.yml b/config/locales/timebands.en.yml
new file mode 100644
index 000000000..fae2f1d30
--- /dev/null
+++ b/config/locales/timebands.en.yml
@@ -0,0 +1,26 @@
+en:
+ timebands:
+ actions:
+ new: "Add a time band"
+ edit: "Edit a time band"
+ destroy: "Delete a time band"
+ destroy_confirm: "Thank you to confirm the deletion of these time band."
+ new:
+ title: "Add a time band"
+ edit:
+ title: "Edit this time band %{timeband}"
+ show:
+ title: "Time band %{timeband}"
+ index:
+ title: "Time bands"
+ activerecord:
+ models:
+ timeband:
+ zero: "Time band"
+ one: "Time band"
+ other: "Time bands"
+ attributes:
+ timeband:
+ name: "Title"
+ start_time: "Start time"
+ end_time: "End time"
diff --git a/config/locales/timebands.fr.yml b/config/locales/timebands.fr.yml
new file mode 100644
index 000000000..2653fe686
--- /dev/null
+++ b/config/locales/timebands.fr.yml
@@ -0,0 +1,26 @@
+fr:
+ timebands:
+ actions:
+ new: "Ajouter un créneau horaire"
+ edit: "Modifier ce créneau horaire"
+ destroy: "Supprimer ce créneau horaire"
+ destroy_confirm: "Merci de confirmer la suppression de ce créneau horaire."
+ new:
+ title: "Ajouter un créneau horaire"
+ edit:
+ title: "Modifier le créneau horaire %{timeband}"
+ show:
+ title: "Créneau horaire %{timeband}"
+ index:
+ title: "Créneaux horaires"
+ activerecord:
+ models:
+ timeband:
+ zero: "créneau horaire"
+ one: "créneau horaire"
+ other: "créneaux horaires"
+ attributes:
+ timeband:
+ name: "Titre"
+ start_time: "Heure de début"
+ end_time: "Heure de fin"
diff --git a/config/locales/transport_modes.yml b/config/locales/transport_modes.en.yml
index 55954abeb..18a933c2c 100644
--- a/config/locales/transport_modes.yml
+++ b/config/locales/transport_modes.en.yml
@@ -22,28 +22,3 @@ en:
taxi: "Taxi"
val: "VAL"
other: "Other"
-
-fr:
- transport_modes:
- name: "Mode de transport"
- label:
- unknown: "Inconnu"
- air: "Air"
- train: "Train"
- long_distance_train: "Train Grande Ligne"
- local_train: "TER"
- rapid_transit: "RER"
- metro: "Métro"
- tramway: "Tramway"
- coach: "Autocar"
- bus: "Bus"
- ferry: "Ferry"
- waterborne: "Bac"
- private_vehicle: "Voiture particulière"
- walk: "Marche à pied"
- trolleybus: "Trolleybus"
- bicycle: "Vélo"
- shuttle: "Navette"
- taxi: "Taxi"
- val: "VAL"
- other: "Autre"
diff --git a/config/locales/transport_modes.fr.yml b/config/locales/transport_modes.fr.yml
new file mode 100644
index 000000000..e889d59f6
--- /dev/null
+++ b/config/locales/transport_modes.fr.yml
@@ -0,0 +1,24 @@
+fr:
+ transport_modes:
+ name: "Mode de transport"
+ label:
+ unknown: "Inconnu"
+ air: "Air"
+ train: "Train"
+ long_distance_train: "Train Grande Ligne"
+ local_train: "TER"
+ rapid_transit: "RER"
+ metro: "Métro"
+ tramway: "Tramway"
+ coach: "Autocar"
+ bus: "Bus"
+ ferry: "Ferry"
+ waterborne: "Bac"
+ private_vehicle: "Voiture particulière"
+ walk: "Marche à pied"
+ trolleybus: "Trolleybus"
+ bicycle: "Vélo"
+ shuttle: "Navette"
+ taxi: "Taxi"
+ val: "VAL"
+ other: "Autre"
diff --git a/config/locales/users.en.yml b/config/locales/users.en.yml
new file mode 100644
index 000000000..17c43f4b2
--- /dev/null
+++ b/config/locales/users.en.yml
@@ -0,0 +1,21 @@
+en:
+ users:
+ actions:
+ new: "Add a new user"
+ edit: "Edit this user"
+ destroy: "Remove this user"
+ destroy_confirm: "Are you sure you want destroy this user?"
+ new:
+ title: "Add a new user"
+ edit:
+ title: "Update user %{user}"
+ show:
+ title: "User %{user}"
+ index:
+ title: "Users"
+ activerecord:
+ models:
+ user: "user"
+ attributes:
+ user:
+ name: "Full name"
diff --git a/config/locales/users.fr.yml b/config/locales/users.fr.yml
new file mode 100644
index 000000000..55d6382ef
--- /dev/null
+++ b/config/locales/users.fr.yml
@@ -0,0 +1,21 @@
+fr:
+ users:
+ actions:
+ new: "Ajouter un utilisateur"
+ edit: "Modifier cet utilisateur"
+ destroy: "Supprimer cet utilisateur"
+ destroy_confirm: "Etes vous sûr de supprimer cet utilisateur ?"
+ new:
+ title: "Ajouter un utilisateur"
+ edit:
+ title: "Modifier l'utilisateur %{user}"
+ show:
+ title: "Utilisateur %{user}"
+ index:
+ title: "Utilisateurs"
+ activerecord:
+ models:
+ user: "utilisateur"
+ attributes:
+ user:
+ name: "Nom complet"
diff --git a/config/locales/users.yml b/config/locales/users.yml
deleted file mode 100644
index 61c75a412..000000000
--- a/config/locales/users.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-en:
- users:
- actions:
- new: "Add a new user"
- edit: "Edit this user"
- destroy: "Remove this user"
- destroy_confirm: "Are you sure you want destroy this user?"
- new:
- title: "Add a new user"
- edit:
- title: "Update user %{user}"
- show:
- title: "User %{user}"
- index:
- title: "Users"
- activerecord:
- models:
- user: "user"
- attributes:
- user:
- name: "Full name"
-fr:
- users:
- actions:
- new: "Ajouter un utilisateur"
- edit: "Modifier cet utilisateur"
- destroy: "Supprimer cet utilisateur"
- destroy_confirm: "Etes vous sûr de supprimer cet utilisateur ?"
- new:
- title: "Ajouter un utilisateur"
- edit:
- title: "Modifier l'utilisateur %{user}"
- show:
- title: "Utilisateur %{user}"
- index:
- title: "Utilisateurs"
- activerecord:
- models:
- user: "utilisateur"
- attributes:
- user:
- name: "Nom complet"
-
diff --git a/config/locales/validation_reports.en.yml b/config/locales/validation_reports.en.yml
new file mode 100644
index 000000000..5dd8d23ef
--- /dev/null
+++ b/config/locales/validation_reports.en.yml
@@ -0,0 +1,344 @@
+en:
+ validation_results:
+ file:
+ zip_name_prefix: "validation_results"
+ summary_errors_file_prefix: "summary_of_tests.csv"
+ detailed_errors_file_prefix: "detail_of_errors.csv"
+ index:
+ line: "Li"
+ column: "Col"
+ validation_result:
+ severities:
+ error: "Required"
+ warning: "Optional"
+ error_txt: "Required"
+ warning_txt: "Optional"
+ statuses:
+ nok: "Error"
+ na: "Unavailable"
+ ok: "Success"
+ details:
+ #### level 1
+ ## NEPTUNE
+ detail_1_neptune_xml_1: "%{source_label} : %{error_value}"
+ detail_1_neptune_xml_2: "%{source_label} : %{error_value}"
+ #### level 2
+ ## NEPTUNE
+ detail_2_neptune_common_1: "L'élément %{source_objectid} a des attributs qui diffèrent entre les différents fichiers qui le définissent"
+ detail_2_neptune_common_2: "L'élément %{source_objectid} partage l'attribut RegistrationNumber = %{error_value} avec un autre objet de même type"
+ detail_2_neptune_network_1: "La ligne %{source_objectid} est absente de la liste des lignes du réseau %{target_0_objectid}"
+ detail_2_neptune_groupofline_1: "La ligne %{source_objectid} est absente de la liste des lignes du du groupe de lignes %{target_0_objectid}"
+ detail_2_neptune_stoparea_1: "Le fils (contains = %{error_value}) de l'arrêt %{source_objectid} n'est pas de type StopArea ni StopPoint"
+ detail_2_neptune_stoparea_2: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type StopPlace ou CommercialStopPoint, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
+ detail_2_neptune_stoparea_3: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type BoardingPosition ou Quay, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
+ detail_2_neptune_stoparea_4: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des points d'arrêt de séquence, or un des arrêts contenus (contains = %{target_0_objectid}) est un StopArea arrêt de type %{error_value}"
+ detail_2_neptune_stoparea_5: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{error_value}) inexistante"
+ detail_2_neptune_stoparea_6: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{target_0_objectid}) qui ne le référence pas en retour (containedIn = %{error_value})"
+ detail_2_neptune_itl_1: "Le fils (contains = %{target_0_objectid}) de type %{error_value} ne peut pas être contenu dans l'arrêt %{source_objectid} de type %{reference_value}"
+ detail_2_neptune_itl_2: "L'arrêt de type ITL %{source_objectid} n'est pas utilisé"
+ detail_2_neptune_itl_3: "L'arrêt areaId = %{error_value} référencé par l'ITL %{source_objectid} n'existe pas"
+ detail_2_neptune_itl_4: "L'arrêt areaId = %{target_0_objectid} référencé par l'ITL %{source_objectid} devrait être de type ITL et non de type %{error_value}"
+ detail_2_neptune_itl_5: "La référence lineIdShortCut = %{error_value} de l'ITL %{source_objectid} n'est pas cohérente avec la ligne %{target_0_objectid}"
+ detail_2_neptune_areacentroid_1: "La position géographique <AreaCentroid> %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
+ detail_2_neptune_areacentroid_2: "La position géographique <AreaCentroid> %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ detail_2_neptune_connectionlink_1: "La correspondance %{source_objectid} référence 2 arrêts inexistants"
+ detail_2_neptune_accesspoint_1: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{error_value}) inexistant"
+ detail_2_neptune_accesspoint_2: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{target_0_objectid}) de type invalide (ITL)"
+ detail_2_neptune_accesspoint_3: "L'accès %{source_objectid} n'a pas de lien d'accès"
+ detail_2_neptune_accesspoint_4: "L'accès %{source_objectid} de type In a des liens d'accès sortants"
+ detail_2_neptune_accesspoint_5: "L'accès %{source_objectid} de type Out a des liens d'accès entrants"
+ detail_2_neptune_accesspoint_6: "L'accès %{source_objectid} de type InOut n'a que des liens d'accès entrants ou sortants"
+ detail_2_neptune_accesspoint_7: "L'accès %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ detail_2_neptune_accesslink_1: "La liaison d'accès %{source_objectid} référence %{error_value} qui n'existe pas"
+ detail_2_neptune_accesslink_2: "Sur la liaison d'accès %{source_objectid}, les références startOfLink = %{error_value} et endOfLink = %{reference_value} sont de même type"
+ detail_2_neptune_line_1: "La ligne %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value} inexistant"
+ detail_2_neptune_line_2: "La ligne %{source_objectid} référence un point d'arrêt <StopPoint> (lineEnd = %{error_value}) inexistant "
+ detail_2_neptune_line_3: "La ligne %{source_objectid} référence un point d'arrêt (lineEnd = %{error_value}) qui n'est pas terminus d'une séquence d'arrêts"
+ detail_2_neptune_line_4: "La ligne %{source_objectid} référence une séquence d'arrêt (routeId = %{error_value}) inexistante"
+ detail_2_neptune_line_5: "La séquence d'arrêts (routeId = %{target_0_objectid}) n'est pas référencée par la ligne %{source_objectid}"
+ detail_2_neptune_route_1: "La séquence d'arrêts %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
+ detail_2_neptune_route_2: "La séquence d'arrêts %{source_objectid} référence un tronçon (ptLinkId = %{error_value}) inexistant"
+ detail_2_neptune_route_3: "La séquence retour (waybackRouteId = %{error_value}) de la séquence d'arrêts %{source_objectid} n'existe pas"
+ detail_2_neptune_route_4: "Le tronçon (ptLinkId = %{error_value}) référencé par la séquence d'arrêt %{source_objectid} est partagé avec %{target_0_objectid}"
+ detail_2_neptune_route_5: "Le tronçon %{source_objectid} partage un %{reference_value} : %{error_value} avec un autre tronçon"
+ detail_2_neptune_route_6_1: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons forme un anneau"
+ detail_2_neptune_route_6_2: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons est rompu au tronçon %{target_0_objectid}"
+ detail_2_neptune_route_7: "La séquence d'arrêts %{source_objectid} ne référence pas la mission %{target_0_objectid} alors que cette mission référence la séquence d'arrêt"
+ detail_2_neptune_route_8: "La mission journeyPatternId = %{target_0_objectid} de la séquence d'arrêts %{source_objectid} utilise des points d'arrêts hors séquence"
+ detail_2_neptune_route_9: "Le point d'arrêt (stopPointId = %{target_0_objectid}) de la séquence d'arrêts %{source_objectid} n'est utilisé dans aucune mission"
+ detail_2_neptune_route_10: "La séquence retour (waybackRouteId = %{target_0_objectid}) ne référence pas la séquence d'arrêts %{source_objectid} comme retour"
+ detail_2_neptune_route_11: "Le sens (%{reference_value}) de la séquence d'arrêt %{source_objectid} n'est pas compatible avec celui (%{error_value}) de la séquence opposée %{target_0_objectid}"
+ detail_2_neptune_route_12: "Le départ dans la zone %{reference_value}) de la séquence d'arrêts %{source_objectid} n'est pas dans la même zone que l'arrivée (zone %{error_value} de la séquence retour %{target_0_objectid}"
+ detail_2_neptune_ptlink_1: "Le tronçon %{source_objectid} reférence un %{reference_value} = %{error_value} inexistant"
+ detail_2_neptune_journeypattern_1: "La mission %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
+ detail_2_neptune_journeypattern_2: "La mission %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value}) inexistant"
+ detail_2_neptune_journeypattern_3: "La mission %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
+ detail_2_neptune_stoppoint_1: "Le point d'arrêt %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
+ detail_2_neptune_stoppoint_2: "Le point d'arrêt %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value}) inexistant"
+ detail_2_neptune_stoppoint_3: "Le point d'arrêt %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
+ detail_2_neptune_stoppoint_4: "Le point d'arrêt %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ detail_2_neptune_timetable_1: "Le calendrier (<Timetable>) %{source_objectid} ne référence aucune course existante"
+ detail_2_neptune_timetable_2: "La course %{source_objectid} n'est référencée dans aucun calendrier (<Timetable>)"
+ detail_2_neptune_vehiclejourney_1: "La course %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_2: "La course %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_3: "La course %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_4: "La course %{source_objectid} référence un opérateur (operatorId = %{error_value}) inexistant"
+ detail_2_neptune_vehiclejourney_5: "La course %{source_objectid} référence une fréquence horaire (timeSlotId = %{error_value}) inexistante"
+ detail_2_neptune_vehiclejourney_6: "La course %{source_objectid} référence une mission %{error_value} incompatible de la séquence d'arrêts %{reference_value}"
+ detail_2_neptune_vehiclejourney_7: "La mission %{source_objectid} n'est référencée par aucune course"
+ detail_2_neptune_vehiclejourneyatstop_1: "La course %{source_objectid} fournit un horaire sur un point d'arrêt (stopPointId = %{error_value}) inexistant"
+ detail_2_neptune_vehiclejourneyatstop_2: "Un horaire de la course %{source_objectid} référence une autre course : vehicleJourneyId = %{error_value}"
+ detail_2_neptune_vehiclejourneyatstop_3: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts selon l'ordre de la séquence d'arrêts %{error_value}"
+ detail_2_neptune_vehiclejourneyatstop_4: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts de sa mission %{error_value}"
+ detail_2_neptune_facility_1: "L'équipement %{source_objectid} est situé sur un arrêt inexistant (containedId = %{error_value})"
+ detail_2_neptune_facility_2: "L'équipement %{source_objectid} référence un arrêt (stopAreaId = %{error_value}) inexistant"
+ detail_2_neptune_facility_3: "L'équipement %{source_objectid} référence une ligne (lineId = %{error_value} inexistante"
+ detail_2_neptune_facility_4: "L'équipement %{source_objectid} référence une correspondance (connectionLinkId = %{error_value} inexistante"
+ detail_2_neptune_facility_5: "L'équipement %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value} inexistant"
+ detail_2_neptune_facility_6: "L'équipement %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
+ #### level 3
+ detail_3_stoparea_1: "L'arrêt %{source_label} (%{source_objectid}) n'est pas géolocalisé"
+ detail_3_stoparea_2: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop près de l'arrêt %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
+ detail_3_stoparea_3: "Les arrêts %{source_label} (%{source_objectid} et %{target_0_objectid}) sont desservis par les mêmes lignes"
+ detail_3_stoparea_4: "L'arrêt %{source_label} (%{source_objectid}) est en dehors du périmètre de contrôle"
+ detail_3_stoparea_5: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
+ detail_3_accesspoint_1: "L'accès %{source_label} (%{source_objectid}) n'est pas géolocalisé"
+ detail_3_accesspoint_2: "L'accès %{source_label} (%{source_objectid}) est localisé trop près de l'accès %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
+ detail_3_accesspoint_3: "L'accès %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
+ detail_3_connectionlink_1: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
+ detail_3_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
+ detail_3_connectionlink_3_1: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_connectionlink_3_2: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_connectionlink_3_3: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_connectionlink_3_4: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
+ detail_3_accesslink_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
+ detail_3_accesslink_3_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_3_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_3_3: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_accesslink_3_4: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
+ detail_3_line_1: "La ligne %{source_label} (%{source_objectid}) a une ligne homonyme sur le même réseau %{target_0_label} (%{target_0_objectid})"
+ detail_3_line_2: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
+ detail_3_route_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), l'arrêt %{target_0_label} (%{target_0_objectid}) est desservi 2 fois consécutivement"
+ detail_3_route_2: "Les terminus de la séquence d'arrêt %{source_label} (%{source_objectid}) ne sont pas cohérent avec ceux de sa séquence opposée : l'une part de %{target_0_label} (%{target_0_objectid}) et l'autre arrive à %{target_1_label} (%{target_1_objectid})"
+ detail_3_route_3_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} < %{reference_value} "
+ detail_3_route_3_2: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} > %{reference_value} "
+ detail_3_route_4: "La séquence d'arrêt %{source_label} (%{source_objectid}) utilise la même liste ordonnée d'arrêts que la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
+ detail_3_route_5: "La séquence d'arrêt %{source_label} (%{source_objectid}) peut admettre la séquence %{target_0_label} (%{target_0_objectid}) comme séquence opposée"
+ detail_3_route_6: "La séquence d'arrêt %{source_label} (%{source_objectid}) doit avoir un minimum de 2 arrêts"
+ detail_3_route_7: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission"
+ detail_3_route_8: "La séquence d'arrêt %{source_label} (%{source_objectid}) a %{error_value} arrêts non utilisés par des missions"
+ detail_3_route_9: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission desservant l'ensemble de ses arrêts"
+ detail_3_journeypattern_1: "La mission %{source_label} (%{source_objectid}) utilise les mêmes arrêts que la mission %{target_0_label} (%{target_0_objectid}) - nombre d'arrêts = %{error_value}"
+ detail_3_vehiclejourney_1: "Arrêt %{target_0_label} (%{target_0_objectid}) : durée d'arrêt mesurée %{error_value} > %{reference_value}"
+ detail_3_vehiclejourney_2_1: "La course %{source_label} (%{source_objectid}) a des horaires décroissants entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
+ detail_3_vehiclejourney_2_2: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} < %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
+ detail_3_vehiclejourney_2_3: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} > %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
+ detail_3_vehiclejourney_3: "La course %{source_label} (%{source_objectid}) a une variation de progression entre les arrêts %{target_1_label} (%{target_1_objectid}) et %{target_2_label} (%{target_2_objectid}) %{error_value} > %{reference_value} avec la course %{target_0_label} (%{target_0_objectid})"
+ detail_3_vehiclejourney_4: "La course %{source_label} (%{source_objectid}) n'a pas de calendrier d'application"
+ detail_3_facility_1: "L'équipement %{source_label} (%{source_objectid}) n'est pas géolocalisé"
+ detail_3_facility_2: "L'équipement %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{areaName} (%{areaId}) : distance %{error_value} > %{reference_value}"
+
+ detail_4_network_1_min_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value}) "
+ detail_4_network_1_max_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_network_1_pattern: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_network_1_unique: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) a une valeur partagée avec le réseau %{target_0_label} (%{target_0_objectid})"
+ detail_4_company_1_min_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_company_1_max_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_company_1_pattern: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_company_1_unique: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) a une valeur partagée avec le transporteur %{target_0_label} (%{target_0_objectid})"
+ detail_4_groupofline_1_min_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_groupofline_1_max_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_groupofline_1_pattern: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_groupofline_1_unique: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) a une valeur partagée avec le groupe de lignes %{target_0_label} (%{target_0_objectid})"
+ detail_4_stoparea_1_min_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_stoparea_1_max_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_stoparea_1_pattern: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_stoparea_1_unique: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) a une valeur partagée avec l'arrêt %{target_0_label} (%{target_0_objectid})"
+ detail_4_stoparea_2: "L'arrêt physique %{source_label} (%{source_objectid}) n'a pas de parent"
+ detail_4_accesspoint_1_min_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_accesspoint_1_max_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_accesspoint_1_pattern: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_accesspoint_1_unique: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le point d'accès %{target_0_label} (%{target_0_objectid})"
+ detail_4_accesslink_1_min_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_accesslink_1_max_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_accesslink_1_pattern: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_accesslink_1_unique: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le lien d'accès %{target_0_label} (%{target_0_objectid})"
+ detail_4_connectionlink_1_min_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_connectionlink_1_max_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_connectionlink_1_pattern: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_connectionlink_1_unique: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) a une valeur partagée avec la correspondance %{target_0_label} (%{target_0_objectid})"
+ detail_4_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}) au moins l'un des arrêts %{startName} (%{startId}) et %{endName} (%{endId}) n'est pas un arrêt physique"
+ detail_4_timetable_1_min_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_timetable_1_max_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_timetable_1_pattern: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_timetable_1_unique: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) a une valeur partagée avec le calendrier %{target_0_label} (%{target_0_objectid})"
+ detail_4_line_1_min_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_line_1_max_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_line_1_pattern: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_line_1_unique: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) a une valeur partagée avec la ligne %{target_0_label} (%{target_0_objectid})"
+ detail_4_line_2: "La ligne %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
+ detail_4_line_3_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de groupe de lignes"
+ detail_4_line_3_2: "La ligne %{source_label} (%{source_objectid}) a plusieurs groupes de lignes"
+ detail_4_line_4_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
+ detail_4_line_4_2: "La ligne %{source_label} (%{source_objectid}) a trop de séquences d'arrêts non associées (%{error_value})"
+ detail_4_route_1_min_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_route_1_max_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_route_1_pattern: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_route_1_unique: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) a une valeur partagée avec la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
+ detail_4_journeypattern_1_min_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_journeypattern_1_max_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_journeypattern_1_pattern: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_journeypattern_1_unique: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) a une valeur partagée avec la mission %{target_0_label} (%{target_0_objectid})"
+ detail_4_vehiclejourney_1_min_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
+ detail_4_vehiclejourney_1_max_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
+ detail_4_vehiclejourney_1_pattern: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
+ detail_4_vehiclejourney_1_unique: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) a une valeur partagée avec la course %{target_0_label} (%{target_0_objectid})"
+ detail_4_vehiclejourney_2: "La course %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
+ activemodel:
+ models:
+ validation_result:
+ zero: "Validation"
+ one: "Validation"
+ other: "Validation"
+ attributes:
+ validation_result:
+ 1-NEPTUNE-XML-1: "Conformité à la syntaxe XML suivant les recommandations du W3C."
+ 1-NEPTUNE-XML-2: "Conformité au schéma défini par la XSD du profil TRIDENT/NEPTUNE."
+ 2-NEPTUNE-Common-1: "Unicité des éléments objectId des différents objets d'un lot de fichiers Neptune."
+ 2-NEPTUNE-Common-2: "Unicité des éléments regitrationNumber des différents objets d'un lot de fichiers Neptune."
+ 2-NEPTUNE-Network-1: "Correcte référence à des lignes <Line> dans version du réseau <PTNetwork>."
+ 2-NEPTUNE-GroupOfLine-1: "Correcte référence à des lignes <Line> dans groupe de lignes <GroupOfLine>."
+ 2-NEPTUNE-StopArea-1: "Correcte référence à des arrêts <StopArea> et/ou à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea>."
+ 2-NEPTUNE-StopArea-2: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type StopPlace."
+ 2-NEPTUNE-StopArea-3: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type CommercialStopPoint."
+ 2-NEPTUNE-StopArea-4: "Correcte référence à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea> de type BoardingPosition ou Quay."
+ 2-NEPTUNE-StopArea-5: "Correcte référence à une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
+ 2-NEPTUNE-StopArea-6: "référenceréciproque d'une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
+ 2-NEPTUNE-ITL-1: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type ITL."
+ 2-NEPTUNE-ITL-2: "Correcte référence à des arrêts <StopArea> de type ITL dans la classe d’objets <ITL>."
+ 2-NEPTUNE-ITL-3: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <ITL>."
+ 2-NEPTUNE-ITL-4: "Vérification du type de référence à des arrêts <StopArea> type ITL dans la classe d’objets <ITL>."
+ 2-NEPTUNE-ITL-5: "Bonne référence à la ligne <Line> dans la classe d’objets <ITL>."
+ 2-NEPTUNE-AreaCentroid-1: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <AreaCentroid>."
+ 2-NEPTUNE-AreaCentroid-2: "Vérification du modèle de projection de référence utilisé."
+ 2-NEPTUNE-ConnectionLink-1: "Correcte référence aux arrêts <StopArea> définissant des tronçons de correspondance <ConnectionLink>."
+ 2-NEPTUNE-AccessPoint-1: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
+ 2-NEPTUNE-AccessPoint-2: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
+ 2-NEPTUNE-AccessPoint-3: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint>."
+ 2-NEPTUNE-AccessPoint-4: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> de type 'in'."
+ 2-NEPTUNE-AccessPoint-5: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'out'."
+ 2-NEPTUNE-AccessPoint-6: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'inout'."
+ 2-NEPTUNE-AccessPoint-7: "Vérification du modèle de projection de référence utilisé."
+ 2-NEPTUNE-AccessLink-1: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
+ 2-NEPTUNE-AccessLink-2: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
+ 2-NEPTUNE-Line-1: "Correcte référence au réseau dans l'objet ligne <Line>."
+ 2-NEPTUNE-Line-2: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
+ 2-NEPTUNE-Line-3: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
+ 2-NEPTUNE-Line-4: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
+ 2-NEPTUNE-Line-5: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
+ 2-NEPTUNE-Route-1: "Existence des missions <JourneyPattern> référencées par la séquence d'arrêt <ChouetteRoute>."
+ 2-NEPTUNE-Route-2: "Existence des tronçons commerciaux <PtLink> référencés par la séquence d'arrêt <ChouetteRoute>."
+ 2-NEPTUNE-Route-3: "Existence de la séquence opposée <ChouetteRoute> référencée par la séquence d'arrêt <ChouetteRoute>."
+ 2-NEPTUNE-Route-4: "Correcte référence à un tronçon commercial <PtLink> dans une séquence d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-5: "Vérification que tous les points d'arrêts sur parcours sont rattachés à une séquence d'arrêts <ChouetteRoute> au départ d'un tronçon commercial <PtLink> et/ou à l'arrivée d'un autre tronçon commercial <PtLink> de la même séquence d'arrêts."
+ 2-NEPTUNE-Route-6: "Vérification du correct ordonnancement des points d'arrêts sur parcours <StopPoint> dans le chainage des tronçons <PtLink> d'une séquence d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-7: "référence mutuelle des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-8: "Cohérence des références aux points d'arrêt des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-9: "Utilité des points d'arrêts sur parcours des séquences d'arrêts <ChouetteRoute>."
+ 2-NEPTUNE-Route-10: "référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
+ 2-NEPTUNE-Route-11: "Cohérence des sens de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
+ 2-NEPTUNE-Route-12: "Cohérence des terminus de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
+ 2-NEPTUNE-PtLink-1: "Existence des arrêts <StopPoint> référencés par les tronçons commerciaux <PTLink>."
+ 2-NEPTUNE-JourneyPattern-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la mission <JourneyPattern>."
+ 2-NEPTUNE-JourneyPattern-2: "Existence des arrêts <StopPoint> référencés par la mission <JourneyPattern>."
+ 2-NEPTUNE-JourneyPattern-3: "Existence de la ligne <Line> référencée par la mission <JourneyPattern>."
+ 2-NEPTUNE-StopPoint-1: "Existence de la ligne <Line> référencée par l'arrêt <StopPoint>."
+ 2-NEPTUNE-StopPoint-2: "Existence du réseau <PTNetwork> référence par l'arrêt <StopPoint>."
+ 2-NEPTUNE-StopPoint-3: "Existence de l'arrêt <StopArea> référencé par l'arrêt <StopPoint>."
+ 2-NEPTUNE-StopPoint-4: "Vérification du modèle de projection de référence utilisé."
+ 2-NEPTUNE-Timetable-1: "Utilité des calendriers."
+ 2-NEPTUNE-Timetable-2: "Utilité des calendriers."
+ 2-NEPTUNE-VehicleJourney-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-2: "Existence de la mission <JourneyPattern> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-3: "Existence de la ligne <Line> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-4: "Existence de l'opérateur <Company> référencé par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-5: "Existence de la tranche horaire <TimeSlot> référencée par la course <VehicleJourney>."
+ 2-NEPTUNE-VehicleJourney-6: "Cohérence entre la course, la mission et la séquence d'arrêts."
+ 2-NEPTUNE-VehicleJourney-7: "Utilité des missions"
+ 2-NEPTUNE-VehicleJourneyAtStop-1: "Existence de l'arrêt <StopPoint> référencé par l'horaire <VehicleJourneyAtStop>."
+ 2-NEPTUNE-VehicleJourneyAtStop-2: "Existence de la course <VehicleJourney> référenceé par l'horaire <VehicleJourneyAtStop>."
+ 2-NEPTUNE-VehicleJourneyAtStop-3: "adéquation des horaires de la course à la séquence d'arrêts."
+ 2-NEPTUNE-VehicleJourneyAtStop-4: "adéquation des horaires de la course à la mission."
+ 2-NEPTUNE-Facility-1: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-2: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-3: "Existence de la ligne <Line> référencée par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-4: "Existence de la correspondance <ConnectionLink> référencée par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-5: "Existence de l'arrêt <StopPoint> référencé par l'équipement <Facility>."
+ 2-NEPTUNE-Facility-6: "Vérification du modèle de projection de référence utilisé."
+ 3-StopArea-1: "Vérification de la géolocalisation de tous les arrêts hors ITL"
+ 3-StopArea-2: "Vérification que 2 arrêts de noms différents en dehors d'un même regroupement d'arrêts ne sont pas trop proches"
+ 3-StopArea-3: "Vérification de l'unicité des arrêts"
+ 3-StopArea-4: "Vérification de la géolocalisation des arrêts"
+ 3-StopArea-5: "Vérification de la position relative des arrêts et de leur parent"
+ 3-AccessPoint-1: "Vérification de la géolocalisation de tous les accès"
+ 3-AccessPoint-2: "Vérification que deux accès de nom différents ne sont pas trop proches"
+ 3-AccessPoint-3: "Vérification de la proximité entre les accès et leur arrêt de rattachement"
+ 3-ConnectionLink-1: "Vérification de la proximité entre les deux arrêts d'une correspondance"
+ 3-ConnectionLink-2: "Vérification de la cohérence entre la distance fournie sur la correspondance et la distance géographique entre les deux arrêts de la correspondance"
+ 3-ConnectionLink-3: "Vérification de la vitesse de parcours entre les deux arrêts d'une correspondance"
+ 3-AccessLink-1: "Vérification de la proximité entre les deux extrémités d'un lien d'accès"
+ 3-AccessLink-2: "Vérification de la cohérence entre la distance fournie sur le lien d'accès et la distance géographique entre les deux extrémités du lien d'accès"
+ 3-AccessLink-3: "Vérification de la vitesse de parcours entre les deux extrémités d'un lien d'accès"
+ 3-Line-1: "Vérification de la non homonymie des lignes"
+ 3-Line-2: "Vérification de la présence de séquences d'arrêts sur la ligne"
+ 3-Route-1: "Vérification de la succession des arrêts de la séquence"
+ 3-Route-2: "Vérification de la séquence inverse"
+ 3-Route-3: "Vérification de la distance entre deux arrêts successifs de la séquence"
+ 3-Route-4: "Vérification de double définition de séquences"
+ 3-Route-5: "Vérification de séquences sans séquence opposée"
+ 3-Route-6: "Vérification de la présence d'arrêts dans la séquence"
+ 3-Route-7: "Vérification de la présence de missions"
+ 3-Route-8: "Vérification de l'utilisation des arrêts par les missions"
+ 3-Route-9: "Vérification de l’existence d’une mission passant par tous les arrêts de la séquence"
+ 3-JourneyPattern-1: "Vérification de double définition de missions"
+ 3-VehicleJourney-1: "Vérification de la chronologie des horaires de passage à un arrêt"
+ 3-VehicleJourney-2: "Vérification de la vitesse de transfert entre deux arrêts"
+ 3-VehicleJourney-3: "Vérification de la cohérence des courses successives desservant deux mêmes arrêts"
+ 3-VehicleJourney-4: "Vérification de l'affectation des courses à un calendrier"
+ 3-Facility-1: "Vérification de la géolocalisation de tous les accès"
+ 3-Facility-2: "Vérification de la proximité entre les équipements et leur arrêt de rattachement"
+ 4-Network-1: "Vérification de contraintes sur les attributs des réseaux"
+ 4-Company-1: "Vérification de contraintes sur les attributs des transporteurs"
+ 4-GroupOfLine-1: "Vérification de contraintes sur les attributs des groupes de lignes"
+ 4-StopArea-1: "Vérification de contraintes sur les attributs des arrêts"
+ 4-StopArea-2: "Vérification de l'existance d'un arrêt commercial pour les arrêts physiques"
+ 4-StopArea-3: "Vérification de la cohérence entre les noms de communes et leur code INSEE"
+ 4-AccessPoint-1: "Vérification de contraintes sur les attributs des accès"
+ 4-AccessLink-1: "Vérification de contraintes sur les attributs des liens d'accès"
+ 4-ConnectionLink-1: "Vérification de contraintes sur les attributs des correspondances"
+ 4-ConnectionLink-2: "Vérification des type d'arrêts en correspondance"
+ 4-Timetable-1: "Vérification de contraintes sur les attributs des calendiers"
+ 4-Line-1: "Vérification de contraintes sur les attributs des lignes"
+ 4-Line-2: "Vérification des modes de transport des lignes"
+ 4-Line-3: "Vérification des groupes de lignes d'une ligne"
+ 4-Line-4: "Vérification des séquences d'arrêts d'une ligne"
+ 4-Route-1: "Vérification de contraintes sur les attributs des séquences d'arrêt"
+ 4-JourneyPattern-1: "Vérification de contraintes sur les attributs des missions"
+ 4-VehicleJourney-1: "Vérification de contraintes sur les attributs des courses"
+ 4-VehicleJourney-2: "Vérification des modes de transport des courses"
+ severity: "Severity"
+ status: "Status"
+ rule_level: "Level"
+ rule_target: "Object"
+ rule_number: "Step"
+ rule_code: "Code"
+ violation_count: "errors"
+ violation_count_txt: "Number of errors"
+ objects: "Objects in violations"
+ detail: "Detail"
+ title: "Test title"
+ object: "Error object"
+ resource: "Resources of the error object"
+ url: "URL"
+ first_violations: "First violations"
diff --git a/config/locales/validation_reports.yml b/config/locales/validation_reports.fr.yml
index 57b159d19..8b1757c3a 100644
--- a/config/locales/validation_reports.yml
+++ b/config/locales/validation_reports.fr.yml
@@ -1,347 +1,3 @@
-en:
- validation_results:
- file:
- zip_name_prefix: "validation_results"
- summary_errors_file_prefix: "summary_of_tests.csv"
- detailed_errors_file_prefix: "detail_of_errors.csv"
- index:
- line: "Li"
- column: "Col"
- validation_result:
- severities:
- error: "Required"
- warning: "Optional"
- error_txt: "Required"
- warning_txt: "Optional"
- statuses:
- nok: "Error"
- na: "Unavailable"
- ok: "Success"
- details:
- #### level 1
- ## NEPTUNE
- detail_1_neptune_xml_1: "%{source_label} : %{error_value}"
- detail_1_neptune_xml_2: "%{source_label} : %{error_value}"
- #### level 2
- ## NEPTUNE
- detail_2_neptune_common_1: "L'élément %{source_objectid} a des attributs qui diffèrent entre les différents fichiers qui le définissent"
- detail_2_neptune_common_2: "L'élément %{source_objectid} partage l'attribut RegistrationNumber = %{error_value} avec un autre objet de même type"
- detail_2_neptune_network_1: "La ligne %{source_objectid} est absente de la liste des lignes du réseau %{target_0_objectid}"
- detail_2_neptune_groupofline_1: "La ligne %{source_objectid} est absente de la liste des lignes du du groupe de lignes %{target_0_objectid}"
- detail_2_neptune_stoparea_1: "Le fils (contains = %{error_value}) de l'arrêt %{source_objectid} n'est pas de type StopArea ni StopPoint"
- detail_2_neptune_stoparea_2: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type StopPlace ou CommercialStopPoint, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
- detail_2_neptune_stoparea_3: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des arrêts de type BoardingPosition ou Quay, or un des arrêts contenus (contains = %{target_0_objectid}) est de type %{error_value}"
- detail_2_neptune_stoparea_4: "L'arrêt %{source_objectid} de type %{reference_value} ne peut contenir que des points d'arrêt de séquence, or un des arrêts contenus (contains = %{target_0_objectid}) est un StopArea arrêt de type %{error_value}"
- detail_2_neptune_stoparea_5: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{error_value}) inexistante"
- detail_2_neptune_stoparea_6: "L'arrêt %{source_objectid} référence une position géographique (centroidOfArea = %{target_0_objectid}) qui ne le référence pas en retour (containedIn = %{error_value})"
- detail_2_neptune_itl_1: "Le fils (contains = %{target_0_objectid}) de type %{error_value} ne peut pas être contenu dans l'arrêt %{source_objectid} de type %{reference_value}"
- detail_2_neptune_itl_2: "L'arrêt de type ITL %{source_objectid} n'est pas utilisé"
- detail_2_neptune_itl_3: "L'arrêt areaId = %{error_value} référencé par l'ITL %{source_objectid} n'existe pas"
- detail_2_neptune_itl_4: "L'arrêt areaId = %{target_0_objectid} référencé par l'ITL %{source_objectid} devrait être de type ITL et non de type %{error_value}"
- detail_2_neptune_itl_5: "La référence lineIdShortCut = %{error_value} de l'ITL %{source_objectid} n'est pas cohérente avec la ligne %{target_0_objectid}"
- detail_2_neptune_areacentroid_1: "La position géographique <AreaCentroid> %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
- detail_2_neptune_areacentroid_2: "La position géographique <AreaCentroid> %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- detail_2_neptune_connectionlink_1: "La correspondance %{source_objectid} référence 2 arrêts inexistants"
- detail_2_neptune_accesspoint_1: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{error_value}) inexistant"
- detail_2_neptune_accesspoint_2: "L'accès %{source_objectid} référence un arrêt parent (containedIn = %{target_0_objectid}) de type invalide (ITL)"
- detail_2_neptune_accesspoint_3: "L'accès %{source_objectid} n'a pas de lien d'accès"
- detail_2_neptune_accesspoint_4: "L'accès %{source_objectid} de type In a des liens d'accès sortants"
- detail_2_neptune_accesspoint_5: "L'accès %{source_objectid} de type Out a des liens d'accès entrants"
- detail_2_neptune_accesspoint_6: "L'accès %{source_objectid} de type InOut n'a que des liens d'accès entrants ou sortants"
- detail_2_neptune_accesspoint_7: "L'accès %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- detail_2_neptune_accesslink_1: "La liaison d'accès %{source_objectid} référence %{error_value} qui n'existe pas"
- detail_2_neptune_accesslink_2: "Sur la liaison d'accès %{source_objectid}, les références startOfLink = %{error_value} et endOfLink = %{reference_value} sont de même type"
- detail_2_neptune_line_1: "La ligne %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value} inexistant"
- detail_2_neptune_line_2: "La ligne %{source_objectid} référence un point d'arrêt <StopPoint> (lineEnd = %{error_value}) inexistant "
- detail_2_neptune_line_3: "La ligne %{source_objectid} référence un point d'arrêt (lineEnd = %{error_value}) qui n'est pas terminus d'une séquence d'arrêts"
- detail_2_neptune_line_4: "La ligne %{source_objectid} référence une séquence d'arrêt (routeId = %{error_value}) inexistante"
- detail_2_neptune_line_5: "La séquence d'arrêts (routeId = %{target_0_objectid}) n'est pas référencée par la ligne %{source_objectid}"
- detail_2_neptune_route_1: "La séquence d'arrêts %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
- detail_2_neptune_route_2: "La séquence d'arrêts %{source_objectid} référence un tronçon (ptLinkId = %{error_value}) inexistant"
- detail_2_neptune_route_3: "La séquence retour (waybackRouteId = %{error_value}) de la séquence d'arrêts %{source_objectid} n'existe pas"
- detail_2_neptune_route_4: "Le tronçon (ptLinkId = %{error_value}) référencé par la séquence d'arrêt %{source_objectid} est partagé avec %{target_0_objectid}"
- detail_2_neptune_route_5: "Le tronçon %{source_objectid} partage un %{reference_value} : %{error_value} avec un autre tronçon"
- detail_2_neptune_route_6_1: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons forme un anneau"
- detail_2_neptune_route_6_2: "La séquence d'arrêts %{source_objectid} n'est pas une séquence linéaire, le chainage des tronçons est rompu au tronçon %{target_0_objectid}"
- detail_2_neptune_route_7: "La séquence d'arrêts %{source_objectid} ne référence pas la mission %{target_0_objectid} alors que cette mission référence la séquence d'arrêt"
- detail_2_neptune_route_8: "La mission journeyPatternId = %{target_0_objectid} de la séquence d'arrêts %{source_objectid} utilise des points d'arrêts hors séquence"
- detail_2_neptune_route_9: "Le point d'arrêt (stopPointId = %{target_0_objectid}) de la séquence d'arrêts %{source_objectid} n'est utilisé dans aucune mission"
- detail_2_neptune_route_10: "La séquence retour (waybackRouteId = %{target_0_objectid}) ne référence pas la séquence d'arrêts %{source_objectid} comme retour"
- detail_2_neptune_route_11: "Le sens (%{reference_value}) de la séquence d'arrêt %{source_objectid} n'est pas compatible avec celui (%{error_value}) de la séquence opposée %{target_0_objectid}"
- detail_2_neptune_route_12: "Le départ dans la zone %{reference_value}) de la séquence d'arrêts %{source_objectid} n'est pas dans la même zone que l'arrivée (zone %{error_value} de la séquence retour %{target_0_objectid}"
- detail_2_neptune_ptlink_1: "Le tronçon %{source_objectid} reférence un %{reference_value} = %{error_value} inexistant"
- detail_2_neptune_journeypattern_1: "La mission %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
- detail_2_neptune_journeypattern_2: "La mission %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value}) inexistant"
- detail_2_neptune_journeypattern_3: "La mission %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
- detail_2_neptune_stoppoint_1: "Le point d'arrêt %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
- detail_2_neptune_stoppoint_2: "Le point d'arrêt %{source_objectid} référence un réseau (ptNetworkIdShortcut = %{error_value}) inexistant"
- detail_2_neptune_stoppoint_3: "Le point d'arrêt %{source_objectid} référence un arrêt (containedIn = %{error_value}) inexistant"
- detail_2_neptune_stoppoint_4: "Le point d'arrêt %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- detail_2_neptune_timetable_1: "Le calendrier (<Timetable>) %{source_objectid} ne référence aucune course existante"
- detail_2_neptune_timetable_2: "La course %{source_objectid} n'est référencée dans aucun calendrier (<Timetable>)"
- detail_2_neptune_vehiclejourney_1: "La course %{source_objectid} référence une séquence d'arrêts (routeId = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_2: "La course %{source_objectid} référence une mission (journeyPatternId = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_3: "La course %{source_objectid} référence une ligne (lineIdShortcut = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_4: "La course %{source_objectid} référence un opérateur (operatorId = %{error_value}) inexistant"
- detail_2_neptune_vehiclejourney_5: "La course %{source_objectid} référence une fréquence horaire (timeSlotId = %{error_value}) inexistante"
- detail_2_neptune_vehiclejourney_6: "La course %{source_objectid} référence une mission %{error_value} incompatible de la séquence d'arrêts %{reference_value}"
- detail_2_neptune_vehiclejourney_7: "La mission %{source_objectid} n'est référencée par aucune course"
- detail_2_neptune_vehiclejourneyatstop_1: "La course %{source_objectid} fournit un horaire sur un point d'arrêt (stopPointId = %{error_value}) inexistant"
- detail_2_neptune_vehiclejourneyatstop_2: "Un horaire de la course %{source_objectid} référence une autre course : vehicleJourneyId = %{error_value}"
- detail_2_neptune_vehiclejourneyatstop_3: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts selon l'ordre de la séquence d'arrêts %{error_value}"
- detail_2_neptune_vehiclejourneyatstop_4: "La course %{source_objectid} ne fournit pas les horaires des points d'arrêts de sa mission %{error_value}"
- detail_2_neptune_facility_1: "L'équipement %{source_objectid} est situé sur un arrêt inexistant (containedId = %{error_value})"
- detail_2_neptune_facility_2: "L'équipement %{source_objectid} référence un arrêt (stopAreaId = %{error_value}) inexistant"
- detail_2_neptune_facility_3: "L'équipement %{source_objectid} référence une ligne (lineId = %{error_value} inexistante"
- detail_2_neptune_facility_4: "L'équipement %{source_objectid} référence une correspondance (connectionLinkId = %{error_value} inexistante"
- detail_2_neptune_facility_5: "L'équipement %{source_objectid} référence un point d'arrêt (stopPointId = %{error_value} inexistant"
- detail_2_neptune_facility_6: "L'équipement %{source_objectid} utilise un référentiel géographique (longLatType = %{error_value}) invalide"
- #### level 3
- detail_3_stoparea_1: "L'arrêt %{source_label} (%{source_objectid}) n'est pas géolocalisé"
- detail_3_stoparea_2: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop près de l'arrêt %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
- detail_3_stoparea_3: "Les arrêts %{source_label} (%{source_objectid} et %{target_0_objectid}) sont desservis par les mêmes lignes"
- detail_3_stoparea_4: "L'arrêt %{source_label} (%{source_objectid}) est en dehors du périmètre de contrôle"
- detail_3_stoparea_5: "L'arrêt %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
- detail_3_accesspoint_1: "L'accès %{source_label} (%{source_objectid}) n'est pas géolocalisé"
- detail_3_accesspoint_2: "L'accès %{source_label} (%{source_objectid}) est localisé trop près de l'accès %{target_0_label} (%{target_0_objectid}) : distance %{error_value} < %{reference_value}"
- detail_3_accesspoint_3: "L'accès %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{target_0_label} (%{target_0_objectid}) : distance %{error_value} > %{reference_value}"
- detail_3_connectionlink_1: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
- detail_3_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}), la distance entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
- detail_3_connectionlink_3_1: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_connectionlink_3_2: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_connectionlink_3_3: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_connectionlink_3_4: "Sur la correspondance %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) est trop grande : distance %{error_value} > %{reference_value}"
- detail_3_accesslink_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la distance entre l'arrêt %{target_0_label} (%{target_0_objectid}) et l'accès %{target_1_label} (%{target_1_objectid}) : %{error_value} est supérieure à la longueur du lien : %{reference_value}"
- detail_3_accesslink_3_1: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse par défaut %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_3_2: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur occasionnel %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_3_3: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur habitué %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_accesslink_3_4: "Sur le lien d'accès %{source_label} (%{source_objectid}), la vitesse pour un voyageur à mobilité réduite %{error_value} est supérieure à %{reference_value} km/h"
- detail_3_line_1: "La ligne %{source_label} (%{source_objectid}) a une ligne homonyme sur le même réseau %{target_0_label} (%{target_0_objectid})"
- detail_3_line_2: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
- detail_3_route_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), l'arrêt %{target_0_label} (%{target_0_objectid}) est desservi 2 fois consécutivement"
- detail_3_route_2: "Les terminus de la séquence d'arrêt %{source_label} (%{source_objectid}) ne sont pas cohérent avec ceux de sa séquence opposée : l'une part de %{target_0_label} (%{target_0_objectid}) et l'autre arrive à %{target_1_label} (%{target_1_objectid})"
- detail_3_route_3_1: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} < %{reference_value} "
- detail_3_route_3_2: "Sur la séquence d'arrêt %{source_label} (%{source_objectid}), entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid}), distance %{error_value} > %{reference_value} "
- detail_3_route_4: "La séquence d'arrêt %{source_label} (%{source_objectid}) utilise la même liste ordonnée d'arrêts que la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
- detail_3_route_5: "La séquence d'arrêt %{source_label} (%{source_objectid}) peut admettre la séquence %{target_0_label} (%{target_0_objectid}) comme séquence opposée"
- detail_3_route_6: "La séquence d'arrêt %{source_label} (%{source_objectid}) doit avoir un minimum de 2 arrêts"
- detail_3_route_7: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission"
- detail_3_route_8: "La séquence d'arrêt %{source_label} (%{source_objectid}) a %{error_value} arrêts non utilisés par des missions"
- detail_3_route_9: "La séquence d'arrêt %{source_label} (%{source_objectid}) n'a pas de mission desservant l'ensemble de ses arrêts"
- detail_3_journeypattern_1: "La mission %{source_label} (%{source_objectid}) utilise les mêmes arrêts que la mission %{target_0_label} (%{target_0_objectid}) - nombre d'arrêts = %{error_value}"
- detail_3_vehiclejourney_1: "Arrêt %{target_0_label} (%{target_0_objectid}) : durée d'arrêt mesurée %{error_value} > %{reference_value}"
- detail_3_vehiclejourney_2_1: "La course %{source_label} (%{source_objectid}) a des horaires décroissants entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
- detail_3_vehiclejourney_2_2: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} < %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
- detail_3_vehiclejourney_2_3: "La course %{source_label} (%{source_objectid}) a une vitesse %{error_value} > %{reference_value} km/h entre les arrêts %{target_0_label} (%{target_0_objectid}) et %{target_1_label} (%{target_1_objectid})"
- detail_3_vehiclejourney_3: "La course %{source_label} (%{source_objectid}) a une variation de progression entre les arrêts %{target_1_label} (%{target_1_objectid}) et %{target_2_label} (%{target_2_objectid}) %{error_value} > %{reference_value} avec la course %{target_0_label} (%{target_0_objectid})"
- detail_3_vehiclejourney_4: "La course %{source_label} (%{source_objectid}) n'a pas de calendrier d'application"
- detail_3_facility_1: "L'équipement %{source_label} (%{source_objectid}) n'est pas géolocalisé"
- detail_3_facility_2: "L'équipement %{source_label} (%{source_objectid}) est localisé trop loin de son parent %{areaName} (%{areaId}) : distance %{error_value} > %{reference_value}"
-
- detail_4_network_1_min_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value}) "
- detail_4_network_1_max_size: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_network_1_pattern: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_network_1_unique: "L'attribut %{reference_value} du réseau %{source_label} (%{source_objectid}) a une valeur partagée avec le réseau %{target_0_label} (%{target_0_objectid})"
- detail_4_company_1_min_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_company_1_max_size: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_company_1_pattern: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_company_1_unique: "L'attribut %{reference_value} du transporteur %{source_label} (%{source_objectid}) a une valeur partagée avec le transporteur %{target_0_label} (%{target_0_objectid})"
- detail_4_groupofline_1_min_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_groupofline_1_max_size: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_groupofline_1_pattern: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_groupofline_1_unique: "L'attribut %{reference_value} du groupe de lignes %{source_label} (%{source_objectid}) a une valeur partagée avec le groupe de lignes %{target_0_label} (%{target_0_objectid})"
- detail_4_stoparea_1_min_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_stoparea_1_max_size: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_stoparea_1_pattern: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_stoparea_1_unique: "L'attribut %{reference_value} de l'arrêt %{source_label} (%{source_objectid}) a une valeur partagée avec l'arrêt %{target_0_label} (%{target_0_objectid})"
- detail_4_stoparea_2: "L'arrêt physique %{source_label} (%{source_objectid}) n'a pas de parent"
- detail_4_accesspoint_1_min_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_accesspoint_1_max_size: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_accesspoint_1_pattern: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_accesspoint_1_unique: "L'attribut %{reference_value} du point d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le point d'accès %{target_0_label} (%{target_0_objectid})"
- detail_4_accesslink_1_min_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_accesslink_1_max_size: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_accesslink_1_pattern: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_accesslink_1_unique: "L'attribut %{reference_value} du lien d'accès %{source_label} (%{source_objectid}) a une valeur partagée avec le lien d'accès %{target_0_label} (%{target_0_objectid})"
- detail_4_connectionlink_1_min_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_connectionlink_1_max_size: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_connectionlink_1_pattern: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_connectionlink_1_unique: "L'attribut %{reference_value} de la correspondance %{source_label} (%{source_objectid}) a une valeur partagée avec la correspondance %{target_0_label} (%{target_0_objectid})"
- detail_4_connectionlink_2: "Sur la correspondance %{source_label} (%{source_objectid}) au moins l'un des arrêts %{startName} (%{startId}) et %{endName} (%{endId}) n'est pas un arrêt physique"
- detail_4_timetable_1_min_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_timetable_1_max_size: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_timetable_1_pattern: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_timetable_1_unique: "L'attribut %{reference_value} du calendrier %{source_label} (%{source_objectid}) a une valeur partagée avec le calendrier %{target_0_label} (%{target_0_objectid})"
- detail_4_line_1_min_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_line_1_max_size: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_line_1_pattern: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_line_1_unique: "L'attribut %{reference_value} de la ligne %{source_label} (%{source_objectid}) a une valeur partagée avec la ligne %{target_0_label} (%{target_0_objectid})"
- detail_4_line_2: "La ligne %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
- detail_4_line_3_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de groupe de lignes"
- detail_4_line_3_2: "La ligne %{source_label} (%{source_objectid}) a plusieurs groupes de lignes"
- detail_4_line_4_1: "La ligne %{source_label} (%{source_objectid}) n'a pas de séquence d'arrêts"
- detail_4_line_4_2: "La ligne %{source_label} (%{source_objectid}) a trop de séquences d'arrêts non associées (%{error_value})"
- detail_4_route_1_min_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_route_1_max_size: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_route_1_pattern: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_route_1_unique: "L'attribut %{reference_value} de la séquence d'arrêts %{source_label} (%{source_objectid}) a une valeur partagée avec la séquence d'arrêts %{target_0_label} (%{target_0_objectid})"
- detail_4_journeypattern_1_min_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_journeypattern_1_max_size: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_journeypattern_1_pattern: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_journeypattern_1_unique: "L'attribut %{reference_value} de la mission %{source_label} (%{source_objectid}) a une valeur partagée avec la mission %{target_0_label} (%{target_0_objectid})"
- detail_4_vehiclejourney_1_min_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas renseigné ou trop petit (%{error_value})"
- detail_4_vehiclejourney_1_max_size: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) est trop grand (%{error_value})"
- detail_4_vehiclejourney_1_pattern: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) n'est pas au bon format (%{error_value})"
- detail_4_vehiclejourney_1_unique: "L'attribut %{reference_value} de la course %{source_label} (%{source_objectid}) a une valeur partagée avec la course %{target_0_label} (%{target_0_objectid})"
- detail_4_vehiclejourney_2: "La course %{source_label} (%{source_objectid}) a un mode de transport interdit %{error_value}"
- activemodel:
- models:
- validation_result:
- zero: "Validation"
- one: "Validation"
- other: "Validation"
- attributes:
- validation_result:
- 1-NEPTUNE-XML-1: "Conformité à la syntaxe XML suivant les recommandations du W3C."
- 1-NEPTUNE-XML-2: "Conformité au schéma défini par la XSD du profil TRIDENT/NEPTUNE."
- 2-NEPTUNE-Common-1: "Unicité des éléments objectId des différents objets d'un lot de fichiers Neptune."
- 2-NEPTUNE-Common-2: "Unicité des éléments regitrationNumber des différents objets d'un lot de fichiers Neptune."
- 2-NEPTUNE-Network-1: "Correcte référence à des lignes <Line> dans version du réseau <PTNetwork>."
- 2-NEPTUNE-GroupOfLine-1: "Correcte référence à des lignes <Line> dans groupe de lignes <GroupOfLine>."
- 2-NEPTUNE-StopArea-1: "Correcte référence à des arrêts <StopArea> et/ou à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea>."
- 2-NEPTUNE-StopArea-2: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type StopPlace."
- 2-NEPTUNE-StopArea-3: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type CommercialStopPoint."
- 2-NEPTUNE-StopArea-4: "Correcte référence à des points d'arrêt sur parcours <StopPoint> dans les arrêts <StopArea> de type BoardingPosition ou Quay."
- 2-NEPTUNE-StopArea-5: "Correcte référence à une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
- 2-NEPTUNE-StopArea-6: "référenceréciproque d'une position géographique <AreaCentroid> dans les arrêts <StopArea> de tout type StopPlace, CommercialStopPoint, BoardingPosition et Quay."
- 2-NEPTUNE-ITL-1: "Correcte référence à des arrêts <StopArea> dans les arrêts <StopArea> de type ITL."
- 2-NEPTUNE-ITL-2: "Correcte référence à des arrêts <StopArea> de type ITL dans la classe d’objets <ITL>."
- 2-NEPTUNE-ITL-3: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <ITL>."
- 2-NEPTUNE-ITL-4: "Vérification du type de référence à des arrêts <StopArea> type ITL dans la classe d’objets <ITL>."
- 2-NEPTUNE-ITL-5: "Bonne référence à la ligne <Line> dans la classe d’objets <ITL>."
- 2-NEPTUNE-AreaCentroid-1: "Correcte référence à des arrêts <StopArea> dans la classe d’objets <AreaCentroid>."
- 2-NEPTUNE-AreaCentroid-2: "Vérification du modèle de projection de référence utilisé."
- 2-NEPTUNE-ConnectionLink-1: "Correcte référence aux arrêts <StopArea> définissant des tronçons de correspondance <ConnectionLink>."
- 2-NEPTUNE-AccessPoint-1: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
- 2-NEPTUNE-AccessPoint-2: "Correcte référence à un arrêt <StopArea> dans les accès <AccessPoint>."
- 2-NEPTUNE-AccessPoint-3: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint>."
- 2-NEPTUNE-AccessPoint-4: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> de type 'in'."
- 2-NEPTUNE-AccessPoint-5: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'out'."
- 2-NEPTUNE-AccessPoint-6: "Existence de liens d'accès <AccessLink> sur les accès <AccessPoint> sur les accès de type 'inout'."
- 2-NEPTUNE-AccessPoint-7: "Vérification du modèle de projection de référence utilisé."
- 2-NEPTUNE-AccessLink-1: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
- 2-NEPTUNE-AccessLink-2: "Correcte référence aux arrêts <StopArea> et accès <AccessPoint> définissant des liens d'accès <AccessLink>."
- 2-NEPTUNE-Line-1: "Correcte référence au réseau dans l'objet ligne <Line>."
- 2-NEPTUNE-Line-2: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
- 2-NEPTUNE-Line-3: "Correcte référence à un point d'arrêt sur parcours <StopPoint> comme terminus de ligne <Line>."
- 2-NEPTUNE-Line-4: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
- 2-NEPTUNE-Line-5: "Correcte référence aux séquences d'arrêts <ChouetteRoute> dans l'objet ligne <Line>."
- 2-NEPTUNE-Route-1: "Existence des missions <JourneyPattern> référencées par la séquence d'arrêt <ChouetteRoute>."
- 2-NEPTUNE-Route-2: "Existence des tronçons commerciaux <PtLink> référencés par la séquence d'arrêt <ChouetteRoute>."
- 2-NEPTUNE-Route-3: "Existence de la séquence opposée <ChouetteRoute> référencée par la séquence d'arrêt <ChouetteRoute>."
- 2-NEPTUNE-Route-4: "Correcte référence à un tronçon commercial <PtLink> dans une séquence d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-5: "Vérification que tous les points d'arrêts sur parcours sont rattachés à une séquence d'arrêts <ChouetteRoute> au départ d'un tronçon commercial <PtLink> et/ou à l'arrivée d'un autre tronçon commercial <PtLink> de la même séquence d'arrêts."
- 2-NEPTUNE-Route-6: "Vérification du correct ordonnancement des points d'arrêts sur parcours <StopPoint> dans le chainage des tronçons <PtLink> d'une séquence d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-7: "référence mutuelle des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-8: "Cohérence des références aux points d'arrêt des missions <JourneyPattern> et des séquences d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-9: "Utilité des points d'arrêts sur parcours des séquences d'arrêts <ChouetteRoute>."
- 2-NEPTUNE-Route-10: "référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
- 2-NEPTUNE-Route-11: "Cohérence des sens de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
- 2-NEPTUNE-Route-12: "Cohérence des terminus de la référence d'une séquence d'arrêts <ChouetteRoute> à une séquence d'arrêts opposée."
- 2-NEPTUNE-PtLink-1: "Existence des arrêts <StopPoint> référencés par les tronçons commerciaux <PTLink>."
- 2-NEPTUNE-JourneyPattern-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la mission <JourneyPattern>."
- 2-NEPTUNE-JourneyPattern-2: "Existence des arrêts <StopPoint> référencés par la mission <JourneyPattern>."
- 2-NEPTUNE-JourneyPattern-3: "Existence de la ligne <Line> référencée par la mission <JourneyPattern>."
- 2-NEPTUNE-StopPoint-1: "Existence de la ligne <Line> référencée par l'arrêt <StopPoint>."
- 2-NEPTUNE-StopPoint-2: "Existence du réseau <PTNetwork> référence par l'arrêt <StopPoint>."
- 2-NEPTUNE-StopPoint-3: "Existence de l'arrêt <StopArea> référencé par l'arrêt <StopPoint>."
- 2-NEPTUNE-StopPoint-4: "Vérification du modèle de projection de référence utilisé."
- 2-NEPTUNE-Timetable-1: "Utilité des calendriers."
- 2-NEPTUNE-Timetable-2: "Utilité des calendriers."
- 2-NEPTUNE-VehicleJourney-1: "Existence de la séquence d'arrêt <ChouetteRoute> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-2: "Existence de la mission <JourneyPattern> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-3: "Existence de la ligne <Line> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-4: "Existence de l'opérateur <Company> référencé par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-5: "Existence de la tranche horaire <TimeSlot> référencée par la course <VehicleJourney>."
- 2-NEPTUNE-VehicleJourney-6: "Cohérence entre la course, la mission et la séquence d'arrêts."
- 2-NEPTUNE-VehicleJourney-7: "Utilité des missions"
- 2-NEPTUNE-VehicleJourneyAtStop-1: "Existence de l'arrêt <StopPoint> référencé par l'horaire <VehicleJourneyAtStop>."
- 2-NEPTUNE-VehicleJourneyAtStop-2: "Existence de la course <VehicleJourney> référenceé par l'horaire <VehicleJourneyAtStop>."
- 2-NEPTUNE-VehicleJourneyAtStop-3: "adéquation des horaires de la course à la séquence d'arrêts."
- 2-NEPTUNE-VehicleJourneyAtStop-4: "adéquation des horaires de la course à la mission."
- 2-NEPTUNE-Facility-1: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
- 2-NEPTUNE-Facility-2: "Existence de l'arrêt <StopArea> référencé par l'équipement <Facility>."
- 2-NEPTUNE-Facility-3: "Existence de la ligne <Line> référencée par l'équipement <Facility>."
- 2-NEPTUNE-Facility-4: "Existence de la correspondance <ConnectionLink> référencée par l'équipement <Facility>."
- 2-NEPTUNE-Facility-5: "Existence de l'arrêt <StopPoint> référencé par l'équipement <Facility>."
- 2-NEPTUNE-Facility-6: "Vérification du modèle de projection de référence utilisé."
- 3-StopArea-1: "Vérification de la géolocalisation de tous les arrêts hors ITL"
- 3-StopArea-2: "Vérification que 2 arrêts de noms différents en dehors d'un même regroupement d'arrêts ne sont pas trop proches"
- 3-StopArea-3: "Vérification de l'unicité des arrêts"
- 3-StopArea-4: "Vérification de la géolocalisation des arrêts"
- 3-StopArea-5: "Vérification de la position relative des arrêts et de leur parent"
- 3-AccessPoint-1: "Vérification de la géolocalisation de tous les accès"
- 3-AccessPoint-2: "Vérification que deux accès de nom différents ne sont pas trop proches"
- 3-AccessPoint-3: "Vérification de la proximité entre les accès et leur arrêt de rattachement"
- 3-ConnectionLink-1: "Vérification de la proximité entre les deux arrêts d'une correspondance"
- 3-ConnectionLink-2: "Vérification de la cohérence entre la distance fournie sur la correspondance et la distance géographique entre les deux arrêts de la correspondance"
- 3-ConnectionLink-3: "Vérification de la vitesse de parcours entre les deux arrêts d'une correspondance"
- 3-AccessLink-1: "Vérification de la proximité entre les deux extrémités d'un lien d'accès"
- 3-AccessLink-2: "Vérification de la cohérence entre la distance fournie sur le lien d'accès et la distance géographique entre les deux extrémités du lien d'accès"
- 3-AccessLink-3: "Vérification de la vitesse de parcours entre les deux extrémités d'un lien d'accès"
- 3-Line-1: "Vérification de la non homonymie des lignes"
- 3-Line-2: "Vérification de la présence de séquences d'arrêts sur la ligne"
- 3-Route-1: "Vérification de la succession des arrêts de la séquence"
- 3-Route-2: "Vérification de la séquence inverse"
- 3-Route-3: "Vérification de la distance entre deux arrêts successifs de la séquence"
- 3-Route-4: "Vérification de double définition de séquences"
- 3-Route-5: "Vérification de séquences sans séquence opposée"
- 3-Route-6: "Vérification de la présence d'arrêts dans la séquence"
- 3-Route-7: "Vérification de la présence de missions"
- 3-Route-8: "Vérification de l'utilisation des arrêts par les missions"
- 3-Route-9: "Vérification de l’existence d’une mission passant par tous les arrêts de la séquence"
- 3-JourneyPattern-1: "Vérification de double définition de missions"
- 3-VehicleJourney-1: "Vérification de la chronologie des horaires de passage à un arrêt"
- 3-VehicleJourney-2: "Vérification de la vitesse de transfert entre deux arrêts"
- 3-VehicleJourney-3: "Vérification de la cohérence des courses successives desservant deux mêmes arrêts"
- 3-VehicleJourney-4: "Vérification de l'affectation des courses à un calendrier"
- 3-Facility-1: "Vérification de la géolocalisation de tous les accès"
- 3-Facility-2: "Vérification de la proximité entre les équipements et leur arrêt de rattachement"
- 4-Network-1: "Vérification de contraintes sur les attributs des réseaux"
- 4-Company-1: "Vérification de contraintes sur les attributs des transporteurs"
- 4-GroupOfLine-1: "Vérification de contraintes sur les attributs des groupes de lignes"
- 4-StopArea-1: "Vérification de contraintes sur les attributs des arrêts"
- 4-StopArea-2: "Vérification de l'existance d'un arrêt commercial pour les arrêts physiques"
- 4-StopArea-3: "Vérification de la cohérence entre les noms de communes et leur code INSEE"
- 4-AccessPoint-1: "Vérification de contraintes sur les attributs des accès"
- 4-AccessLink-1: "Vérification de contraintes sur les attributs des liens d'accès"
- 4-ConnectionLink-1: "Vérification de contraintes sur les attributs des correspondances"
- 4-ConnectionLink-2: "Vérification des type d'arrêts en correspondance"
- 4-Timetable-1: "Vérification de contraintes sur les attributs des calendiers"
- 4-Line-1: "Vérification de contraintes sur les attributs des lignes"
- 4-Line-2: "Vérification des modes de transport des lignes"
- 4-Line-3: "Vérification des groupes de lignes d'une ligne"
- 4-Line-4: "Vérification des séquences d'arrêts d'une ligne"
- 4-Route-1: "Vérification de contraintes sur les attributs des séquences d'arrêt"
- 4-JourneyPattern-1: "Vérification de contraintes sur les attributs des missions"
- 4-VehicleJourney-1: "Vérification de contraintes sur les attributs des courses"
- 4-VehicleJourney-2: "Vérification des modes de transport des courses"
- severity: "Severity"
- status: "Status"
- rule_level: "Level"
- rule_target: "Object"
- rule_number: "Step"
- rule_code: "Code"
- violation_count: "errors"
- violation_count_txt: "Number of errors"
- objects: "Objects in violations"
- detail: "Detail"
- title: "Test title"
- object: "Error object"
- resource: "Resources of the error object"
- url: "URL"
- first_violations: "First violations"
fr:
validation_results:
file:
@@ -687,4 +343,3 @@ fr:
resource: "Ressource de l'objet en erreur"
url: "URL"
first_violations: "Premières violations"
-
diff --git a/config/locales/validation_tasks.en.yml b/config/locales/validation_tasks.en.yml
new file mode 100644
index 000000000..9c3e6d719
--- /dev/null
+++ b/config/locales/validation_tasks.en.yml
@@ -0,0 +1,97 @@
+en:
+ validation_tasks:
+ actions:
+ new: "New validation"
+ destroy: "Destroy"
+ destroy_confirm: "Are you sure you want destroy this validation?"
+ new:
+ title: "New validation"
+ all: "All"
+ flash: "Validation task on queue, refresh page to see progression"
+ fields_gtfs_validation:
+ warning: "Filter on stop areas validation only GTFS stops and transfers files, these may contain extra attributes"
+ index:
+ title: "Validations"
+ warning: ""
+ show:
+ report: "Report"
+ not_yet_started: "On queue"
+ validated_file: "Validated file"
+ completed: "[ Completed ]"
+ failed: "[ Failed ]"
+ pending: "[ In the treatment queue ]"
+ processing: "[ In progress... ]"
+ graph:
+ files:
+ title_zip: "Validation results for files in zip"
+ title_default: "Validation result for %{extension} file"
+ error: "Errors"
+ ignored: "Ignored"
+ ok: "Success"
+ lines:
+ title: "Validated objects"
+ objects_label: "Objects count"
+ lines_stats: "Lines"
+ routes_stats: "Routes"
+ connection_links_stats: "Connection Links"
+ time_tables_stats: "Timetables"
+ stop_areas_stats: "Stop Areas"
+ access_points_stats: "Access Points"
+ vehicle_journeys_stats: "Vehicle Journeys"
+ journey_patterns_stats: "Journey Patterns"
+ statuses:
+ created: "Pending ..."
+ scheduled: "Processing ..."
+ terminated: "Completed"
+ canceled: "Canceled"
+ aborted: "Failed"
+ compliance_check_task: "Validate Report"
+ severities:
+ info: "Information"
+ uncheck: "Unchecked"
+ ok: "Ok"
+ warning: "Warning"
+ error: "Error"
+ fatal: "Fatal"
+ activerecord:
+ models:
+ validation_task:
+ zero: "validation"
+ one: "validation"
+ other: "validations"
+ neptune_validation:
+ zero: "validation"
+ one: "Neptune validation"
+ other: "validations"
+ csv_validation:
+ zero: "validation"
+ one: "CSV validation"
+ other: "validations"
+ gtfs_validation:
+ zero: "validation"
+ one: "GTFS validation"
+ other: "validations"
+ netex_validation:
+ zero: "validation"
+ one: "NeTEx validation"
+ other: "validations"
+ attributes:
+ validation_task:
+ resources: "File to validate"
+ created_at: "Created on"
+ status: "Status"
+ references_type: "subset"
+ no_save: "No save"
+ rule_parameter_set_id: "Rule parameter set for compliance check"
+ object_id_prefix: "Neptune Id prefix"
+ max_distance_for_commercial: "Max distance for commercial stop"
+ max_distance_for_connection_link: "Max distance for connection link"
+ ignore_last_word: "ignore last word"
+ ignore_end_chars: "ignore last chars"
+ formtastic:
+ titles:
+ validation_task:
+ max_distance_for_commercial: "Maximal distance to merge homonymous stops in commercial stop in meter"
+ max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
+ ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
+ ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
diff --git a/config/locales/validation_tasks.yml b/config/locales/validation_tasks.fr.yml
index ff41f0a1a..adbd9c99f 100644
--- a/config/locales/validation_tasks.yml
+++ b/config/locales/validation_tasks.fr.yml
@@ -1,100 +1,3 @@
-en:
- validation_tasks:
- actions:
- new: "New validation"
- destroy: "Destroy"
- destroy_confirm: "Are you sure you want destroy this validation?"
- new:
- title: "New validation"
- all: "All"
- flash: "Validation task on queue, refresh page to see progression"
- fields_gtfs_validation:
- warning: "Filter on stop areas validation only GTFS stops and transfers files, these may contain extra attributes"
- index:
- title: "Validations"
- warning: ""
- show:
- report: "Report"
- not_yet_started: "On queue"
- validated_file: "Validated file"
- completed: "[ Completed ]"
- failed: "[ Failed ]"
- pending: "[ In the treatment queue ]"
- processing: "[ In progress... ]"
- graph:
- files:
- title_zip: "Validation results for files in zip"
- title_default: "Validation result for %{extension} file"
- error: "Errors"
- ignored: "Ignored"
- ok: "Success"
- lines:
- title: "Validated objects"
- objects_label: "Objects count"
- lines_stats: "Lines"
- routes_stats: "Routes"
- connection_links_stats: "Connection Links"
- time_tables_stats: "Timetables"
- stop_areas_stats: "Stop Areas"
- access_points_stats: "Access Points"
- vehicle_journeys_stats: "Vehicle Journeys"
- journey_patterns_stats: "Journey Patterns"
- statuses:
- created: "Pending ..."
- scheduled: "Processing ..."
- terminated: "Completed"
- canceled: "Canceled"
- aborted: "Failed"
- compliance_check_task: "Validate Report"
- severities:
- info: "Information"
- uncheck: "Unchecked"
- ok: "Ok"
- warning: "Warning"
- error: "Error"
- fatal: "Fatal"
- activerecord:
- models:
- validation_task:
- zero: "validation"
- one: "validation"
- other: "validations"
- neptune_validation:
- zero: "validation"
- one: "Neptune validation"
- other: "validations"
- csv_validation:
- zero: "validation"
- one: "CSV validation"
- other: "validations"
- gtfs_validation:
- zero: "validation"
- one: "GTFS validation"
- other: "validations"
- netex_validation:
- zero: "validation"
- one: "NeTEx validation"
- other: "validations"
- attributes:
- validation_task:
- resources: "File to validate"
- created_at: "Created on"
- status: "Status"
- references_type: "subset"
- no_save: "No save"
- rule_parameter_set_id: "Rule parameter set for compliance check"
- object_id_prefix: "Neptune Id prefix"
- max_distance_for_commercial: "Max distance for commercial stop"
- max_distance_for_connection_link: "Max distance for connection link"
- ignore_last_word: "ignore last word"
- ignore_end_chars: "ignore last chars"
- formtastic:
- titles:
- validation_task:
- max_distance_for_commercial: "Maximal distance to merge homonymous stops in commercial stop in meter"
- max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
- ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
- ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
fr:
validation_tasks:
actions:
diff --git a/config/locales/validations.en.yml b/config/locales/validations.en.yml
new file mode 100644
index 000000000..939056d39
--- /dev/null
+++ b/config/locales/validations.en.yml
@@ -0,0 +1,100 @@
+en:
+ validations:
+ actions:
+ new: "New validation"
+ destroy: "Destroy"
+ destroy_confirm: "Are you sure you want destroy this validation?"
+ new:
+ title: "New validation"
+ all: "All"
+ flash: "Validation task on queue, refresh page to see progression"
+ fields_gtfs_validation:
+ warning: "Filter on stop areas validation only GTFS stops and transfers files, these may contain extra attributes"
+ index:
+ title: "Validations"
+ warning: ""
+ show:
+ report: "Report"
+ validated_file: "Validated file"
+ title: "Neptune Validation"
+ summary: "Rapport de conformité à la norme NEPTUNE"
+ completed: "[ Completed ]"
+ failed: "[ Failed ]"
+ pending: "[ In the treatment queue ]"
+ processing: "[ In progress... ]"
+ export: "Download test report"
+ export_csv: "CSV format"
+ graph:
+ files:
+ title_zip: "Validation results for files in zip"
+ title_default: "Validation result for %{extension} file"
+ error: "Errors"
+ ignored: "Ignored"
+ ok: "Success"
+ lines:
+ title: "Validated objects"
+ objects_label: "Objects count"
+ lines_stats: "Lines"
+ routes_stats: "Routes"
+ connection_links_stats: "Connection Links"
+ time_tables_stats: "Timetables"
+ stop_areas_stats: "Stop Areas"
+ access_points_stats: "Access Points"
+ vehicle_journeys_stats: "Vehicle Journeys"
+ journey_patterns_stats: "Journey Patterns"
+ statuses:
+ created: "Pending ..."
+ scheduled: "Processing ..."
+ terminated: "Completed"
+ canceled: "Canceled"
+ aborted: "Failed"
+ compliance_check_task: "Validate Report"
+ severities:
+ info: "Information"
+ uncheck: "Unchecked"
+ ok: "Ok"
+ warning: "Warning"
+ error: "Error"
+ fatal: "Fatal"
+ activemodel:
+ models:
+ validation:
+ zero: "validation"
+ one: "validation"
+ other: "validations"
+ neptune_validation:
+ zero: "validation"
+ one: "Neptune validation"
+ other: "validations"
+ csv_validation:
+ zero: "validation"
+ one: "CSV validation"
+ other: "validations"
+ gtfs_validation:
+ zero: "validation"
+ one: "GTFS validation"
+ other: "validations"
+ netex_validation:
+ zero: "validation"
+ one: "NeTEx validation"
+ other: "validations"
+ attributes:
+ validation:
+ resources: "File to validate"
+ created_at: "Created on"
+ status: "Status"
+ references_type: "subset"
+ no_save: "No save"
+ rule_parameter_set_id: "Rule parameter set for compliance check"
+ object_id_prefix: "Neptune Id prefix"
+ max_distance_for_commercial: "Max distance for commercial stop"
+ max_distance_for_connection_link: "Max distance for connection link"
+ ignore_last_word: "ignore last word"
+ ignore_end_chars: "ignore last chars"
+ formtastic:
+ titles:
+ validation:
+ max_distance_for_commercial: "Maximal distance to merge homonymous stops in commercial stop in meter"
+ max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
+ ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
+ ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
diff --git a/config/locales/validations.yml b/config/locales/validations.fr.yml
index 241f6b323..dc459bee0 100644
--- a/config/locales/validations.yml
+++ b/config/locales/validations.fr.yml
@@ -1,103 +1,3 @@
-en:
- validations:
- actions:
- new: "New validation"
- destroy: "Destroy"
- destroy_confirm: "Are you sure you want destroy this validation?"
- new:
- title: "New validation"
- all: "All"
- flash: "Validation task on queue, refresh page to see progression"
- fields_gtfs_validation:
- warning: "Filter on stop areas validation only GTFS stops and transfers files, these may contain extra attributes"
- index:
- title: "Validations"
- warning: ""
- show:
- report: "Report"
- validated_file: "Validated file"
- title: "Neptune Validation"
- summary: "Rapport de conformité à la norme NEPTUNE"
- completed: "[ Completed ]"
- failed: "[ Failed ]"
- pending: "[ In the treatment queue ]"
- processing: "[ In progress... ]"
- export: "Download test report"
- export_csv: "CSV format"
- graph:
- files:
- title_zip: "Validation results for files in zip"
- title_default: "Validation result for %{extension} file"
- error: "Errors"
- ignored: "Ignored"
- ok: "Success"
- lines:
- title: "Validated objects"
- objects_label: "Objects count"
- lines_stats: "Lines"
- routes_stats: "Routes"
- connection_links_stats: "Connection Links"
- time_tables_stats: "Timetables"
- stop_areas_stats: "Stop Areas"
- access_points_stats: "Access Points"
- vehicle_journeys_stats: "Vehicle Journeys"
- journey_patterns_stats: "Journey Patterns"
- statuses:
- created: "Pending ..."
- scheduled: "Processing ..."
- terminated: "Completed"
- canceled: "Canceled"
- aborted: "Failed"
- compliance_check_task: "Validate Report"
- severities:
- info: "Information"
- uncheck: "Unchecked"
- ok: "Ok"
- warning: "Warning"
- error: "Error"
- fatal: "Fatal"
- activemodel:
- models:
- validation:
- zero: "validation"
- one: "validation"
- other: "validations"
- neptune_validation:
- zero: "validation"
- one: "Neptune validation"
- other: "validations"
- csv_validation:
- zero: "validation"
- one: "CSV validation"
- other: "validations"
- gtfs_validation:
- zero: "validation"
- one: "GTFS validation"
- other: "validations"
- netex_validation:
- zero: "validation"
- one: "NeTEx validation"
- other: "validations"
- attributes:
- validation:
- resources: "File to validate"
- created_at: "Created on"
- status: "Status"
- references_type: "subset"
- no_save: "No save"
- rule_parameter_set_id: "Rule parameter set for compliance check"
- object_id_prefix: "Neptune Id prefix"
- max_distance_for_commercial: "Max distance for commercial stop"
- max_distance_for_connection_link: "Max distance for connection link"
- ignore_last_word: "ignore last word"
- ignore_end_chars: "ignore last chars"
- formtastic:
- titles:
- validation:
- max_distance_for_commercial: "Maximal distance to merge homonymous stops in commercial stop in meter"
- max_distance_for_connection_link: "Maximal distance to link stops by connection link stop in meter"
- ignore_last_word: "ignore last word on stop name in homonymous detection (inappliable when just one word occurs)"
- ignore_end_chars: "ignore some chars at the end of stop names in homonymous detection"
fr:
validations:
actions:
diff --git a/config/locales/vehicle_journey_frequencies.en.yml b/config/locales/vehicle_journey_frequencies.en.yml
new file mode 100644
index 000000000..a89110872
--- /dev/null
+++ b/config/locales/vehicle_journey_frequencies.en.yml
@@ -0,0 +1,9 @@
+en:
+ vehicle_journey_frequencies:
+ vehicle_journeys_matrix:
+ line_routes: "Line's routes"
+ actions:
+ index: "Vehicle journey frequency"
+ show: "Show frequency vehicle journey"
+ vehicle_journey_frequency:
+ require_at_least_one_frequency: "You must specify at least one timeslot"
diff --git a/config/locales/vehicle_journey_frequencies.fr.yml b/config/locales/vehicle_journey_frequencies.fr.yml
new file mode 100644
index 000000000..16eb43fa0
--- /dev/null
+++ b/config/locales/vehicle_journey_frequencies.fr.yml
@@ -0,0 +1,9 @@
+fr:
+ vehicle_journey_frequencies:
+ vehicle_journeys_matrix:
+ line_routes: "Séquences d'arrêts de la ligne"
+ actions:
+ index: "Courses en fréquence"
+ show: "Voir les courses en fréquence"
+ vehicle_journey_frequency:
+ require_at_least_one_frequency: "Vous devez spécifier au moins un créneau horaire"
diff --git a/config/locales/vehicle_journey_imports.en.yml b/config/locales/vehicle_journey_imports.en.yml
new file mode 100644
index 000000000..95426700a
--- /dev/null
+++ b/config/locales/vehicle_journey_imports.en.yml
@@ -0,0 +1,24 @@
+en:
+ vehicle_journey_imports:
+ new:
+ title: "Import vehicle journey at stops"
+ export_vehicle_journeys: "Export existing vehicle journey at stops"
+ success: "Import is a success"
+ tooltip:
+ file: "Select a CSV or Excel file"
+ errors:
+ import_aborted: "Errors prohibited this import from completing: "
+ not_same_stop_points: "Error column 1 : Not same stop points than in route %{route}"
+ one_stop_point_used: "Error column %{column} : only one stop scheduled"
+ invalid_vehicle_journey_at_stop: "Error column %{column} line %{line} : vehicle journey at stop invalid %{time}"
+ invalid_vehicle_journey: "Error column %{column}, vehicle journey is invalid : %{message}"
+ exception: "Invalid file, you must provide valid csv, xls or xlsx file"
+ success:
+ created_jp_count: "%{count} journey patterns created"
+ created_vj_count: "%{count} vehicle journeys created"
+ updated_vj_count: "%{count} vehicle journeys updated"
+ deleted_vj_count: "%{count} vehicle journeys deleted"
+ activemodel:
+ attributes:
+ vehicle_journey_import:
+ file: "File"
diff --git a/config/locales/vehicle_journey_imports.fr.yml b/config/locales/vehicle_journey_imports.fr.yml
new file mode 100644
index 000000000..f5a0bb999
--- /dev/null
+++ b/config/locales/vehicle_journey_imports.fr.yml
@@ -0,0 +1,24 @@
+fr:
+ vehicle_journey_imports:
+ new:
+ title: "Import des horaires aux arrêts"
+ export_vehicle_journeys: "Exporter les horaires existants"
+ success: "L'import des données est un succès"
+ tooltip:
+ file: "Sélectionner un fichier CSV ou Excel"
+ errors:
+ import_aborted: "Des erreurs ont empéché le bon déroulement de l'import: "
+ not_same_stop_points: "Erreur colonne 1 : Pas les mêmes points d'arrêt que sur l'itinéraire %{route}"
+ one_stop_point_used: "Erreur colonne %{column} : un seul arrêt desservi"
+ invalid_vehicle_journey_at_stop: "Erreur colonne %{column} ligne %{line} : horaire à l'arrêt invalide %{time}"
+ invalid_vehicle_journey: "Erreur colonne %{column}, la course est invalide : %{message}"
+ exception: "Le fichier est invalide, vous devez fournir un fichier csv, xls ou xlsx valide"
+ success:
+ created_jp_count: "%{count} mission(s) ajoutée(s)"
+ created_vj_count: "%{count} course(s) ajoutée(s)"
+ updated_vj_count: "%{count} course(s) mise(s) à jour"
+ deleted_vj_count: "%{count} course(s) supprimée(s)"
+ activemodel:
+ attributes:
+ vehicle_journey_import:
+ file: "Fichier"
diff --git a/config/locales/vehicle_journey_imports.yml b/config/locales/vehicle_journey_imports.yml
deleted file mode 100644
index fd442d5eb..000000000
--- a/config/locales/vehicle_journey_imports.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-en:
- vehicle_journey_imports:
- new:
- title: "Import vehicle journey at stops"
- export_vehicle_journeys: "Export existing vehicle journey at stops"
- success: "Import is a success"
- tooltip:
- file: "Select a CSV or Excel file"
- errors:
- import_aborted: "Errors prohibited this import from completing: "
- not_same_stop_points: "Error column 1 : Not same stop points than in route %{route}"
- one_stop_point_used: "Error column %{column} : only one stop scheduled"
- invalid_vehicle_journey_at_stop: "Error column %{column} line %{line} : vehicle journey at stop invalid %{time}"
- invalid_vehicle_journey: "Error column %{column}, vehicle journey is invalid : %{message}"
- exception: "Invalid file, you must provide valid csv, xls or xlsx file"
- success:
- created_jp_count: "%{count} journey patterns created"
- created_vj_count: "%{count} vehicle journeys created"
- updated_vj_count: "%{count} vehicle journeys updated"
- deleted_vj_count: "%{count} vehicle journeys deleted"
- activemodel:
- attributes:
- vehicle_journey_import:
- file: "File"
-fr:
- vehicle_journey_imports:
- new:
- title: "Import des horaires aux arrêts"
- export_vehicle_journeys: "Exporter les horaires existants"
- success: "L'import des données est un succès"
- tooltip:
- file: "Sélectionner un fichier CSV ou Excel"
- errors:
- import_aborted: "Des erreurs ont empéché le bon déroulement de l'import: "
- not_same_stop_points: "Erreur colonne 1 : Pas les mêmes points d'arrêt que sur l'itinéraire %{route}"
- one_stop_point_used: "Erreur colonne %{column} : un seul arrêt desservi"
- invalid_vehicle_journey_at_stop: "Erreur colonne %{column} ligne %{line} : horaire à l'arrêt invalide %{time}"
- invalid_vehicle_journey: "Erreur colonne %{column}, la course est invalide : %{message}"
- exception: "Le fichier est invalide, vous devez fournir un fichier csv, xls ou xlsx valide"
- success:
- created_jp_count: "%{count} mission(s) ajoutée(s)"
- created_vj_count: "%{count} course(s) ajoutée(s)"
- updated_vj_count: "%{count} course(s) mise(s) à jour"
- deleted_vj_count: "%{count} course(s) supprimée(s)"
- activemodel:
- attributes:
- vehicle_journey_import:
- file: "Fichier" \ No newline at end of file
diff --git a/config/locales/vehicle_journeys.en.yml b/config/locales/vehicle_journeys.en.yml
new file mode 100644
index 000000000..4f5f763b4
--- /dev/null
+++ b/config/locales/vehicle_journeys.en.yml
@@ -0,0 +1,127 @@
+en:
+ vehicle_journeys:
+ vehicle_journeys_matrix:
+ line_routes: "Line's routes"
+ vehicle_journey:
+ title_stopless: "Vehicle journey %{name}"
+ title: "Vehicle journey leaving from %{stop} at %{time}"
+ vehicle_journey_frequency:
+ title_stopless: "Vehicle journey frequency %{name}"
+ title: "Vehicle journey frequency leaving from %{stop} at %{time}"
+ title_frequency: "Vehicle journey frequency with %{interval}min leaving from %{stop} at %{time_first} to %{time_last}"
+ actions:
+ index: "Vehicle time's board"
+ new: "Add a new timed vehicle journey"
+ new_frequency: "Add a new frequency vehicle journey"
+ edit: "Edit this timed vehicle journey"
+ edit_frequency: "Edit this frequency vehicle journey"
+ destroy: "Remove this vehicle journey"
+ destroy_confirm: "Are you sure you want destroy this vehicle journey?"
+ show: "Show timed vehicle journeys"
+ new:
+ title: "Add a new vehicle journey"
+ title_frequency: "Add a new frequency vehicle journey"
+ edit:
+ title_stopless: "Update vehicle journey %{name}"
+ title: "Update vehicle journey %{name} leaving from %{stop} at %{time}"
+ form:
+ stop_title: "Stop"
+ departure: "Departure"
+ arrival: "Arrival"
+ to_arrivals: "Copy departures to arrivals"
+ to_departures: "Copy arrivals to departures"
+ time_tables: "Associated calendars to vehicle journey"
+ slide: "Shift"
+ slide_title: "Shift all vehicle passing times"
+ set: "Set"
+ to: "at"
+ slide_departure: "departure time at first stop"
+ slide_arrival: "arrival time at first stop"
+ submit_timed: "Create vehicle journey"
+ submit_frequency: "Create frequency vehicle journey"
+ submit_timed_edit: "Edit vehicle journey"
+ submit_frequency_edit: "Edit frequency vehicle journey"
+ timeless:
+ title: "Timeless vehicle journeys"
+ vehicle_journeys: "Vehicle journeys with times at stop"
+ vehicles_list: "Vehicle journeys list"
+ show:
+ title: "Vehicle Journey %{vehicle journey}"
+ stop_title: "Stop"
+ departure: "Departure"
+ arrival: "Arrival"
+ time_tables: "Calendars list"
+ bounding: "From %{start} to %{end}"
+ translation_form: "Vehicle journey translations"
+ journey_frequencies: "Timeband"
+ index:
+ title: "Vehicle journeys on route %{route}"
+ vehicle_journeys: "Departure's times"
+ selection: "Filter on"
+ selection_all: "All"
+ select_journey_patterns: "Select journey pattern"
+ select_time_tables: "Enter a timetable"
+ time_range: "Departure time threshold"
+ advanced_search: "Advanced Search"
+ time_filter:
+ time_range_filter: "Filter"
+ sidebar:
+ timeless: "Timeless vehicle journeys"
+ activerecord:
+ models:
+ vehicle_journey:
+ zero: "vehicle journey"
+ one: "vehicle journey"
+ other: "vehicle journeys"
+ attributes:
+ vehicle_journey:
+ line: "Line"
+ route: "Route"
+ journey_pattern: "Journey Pattern"
+ time_tables: "Calendars"
+ time_slot: "Time Slot"
+ company: "Company"
+ number: "Number"
+ comment: "Comments"
+ status_value: "Status Value"
+ transport_mode_name: "Transport Mode"
+ mobility_restricted_suitability: "PRM accessibility"
+ flexible_service: "On demond transportation"
+ unspecified_mrs: "Not specified"
+ accessible: "Accessible"
+ not_accessible: "Not accessible"
+ unspecified_fs: "Not specified"
+ on_demand_fs: "On demand service"
+ regular_fs: "Regular service"
+ published_journey_name: "Published Name"
+ published_journey_identifier: "Published Identifier"
+ facility: "Facility"
+ vehicletypeidentifier: "Vehicle Type Identifier"
+ time_table_ids: "Calendar list"
+ vehicle_journey_at_stop_ids: "Time list"
+ journey_frequency_ids: "Timeband"
+ objectid: "Neptune identifier"
+ object_version: "Version"
+ creation_time: "Created on"
+ creator_id: "Created by"
+ footnote_ids: "Footnotes"
+ errors:
+ models:
+ vehicle_journey:
+ invalid_times: "Invalid times"
+ formtastic:
+ titles:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 8."
diff --git a/config/locales/vehicle_journeys.fr.yml b/config/locales/vehicle_journeys.fr.yml
new file mode 100644
index 000000000..30a4bf081
--- /dev/null
+++ b/config/locales/vehicle_journeys.fr.yml
@@ -0,0 +1,127 @@
+fr:
+ vehicle_journeys:
+ vehicle_journeys_matrix:
+ line_routes: "Séquences d'arrêts de la ligne"
+ vehicle_journey:
+ title_stopless: "Course %{name}"
+ title: "Course partant de %{stop} à %{time}"
+ vehicle_journey_frequency:
+ title_stopless: "Course en fréquence %{name}"
+ title: "Course en fréquence partant de %{stop} à %{time}"
+ title_frequency: "Course en fréquence de %{interval}min partant de %{stop} de %{time_first} à %{time_last}"
+ actions:
+ index: "Horaires des courses"
+ new: "Ajouter une course à horaire"
+ new_frequency: "Ajouter une course en fréquence"
+ edit: "Modifier cette course à horaire"
+ edit_frequency: "Modifier cette course en fréquence"
+ destroy: "Supprimer cette course"
+ destroy_confirm: "Etes vous sûr de supprimer cette course ?"
+ show: "Voir les courses à horaire"
+ new:
+ title: "Ajouter une course à horaire"
+ title_frequency: "Ajouter une course en fréquence"
+ edit:
+ title_stopless: "Modifier la course %{name}"
+ title: "Modifier la course partant de %{stop} à %{time}"
+ form:
+ stop_title: "Arrêt"
+ departure: "Départ"
+ arrival: "Arrivée"
+ to_arrivals: "Copie départs vers arrivées"
+ to_departures: "Copie arrivées vers départs"
+ time_tables: "Calendriers associés à la course"
+ slide: "Décaler"
+ slide_title: "Décaler l'ensemble des horaires de course"
+ set: "Fixer"
+ to: "à"
+ slide_departure: "horaire de départ au 1° arrêt à"
+ slide_arrival: "horaire d'arrivée au 1° arrêt à"
+ submit_timed: "Créer course"
+ submit_frequency: "Créer course en fréquence"
+ submit_timed_edit: "Modifier course"
+ submit_frequency_edit: "Modifier course en fréquence"
+ 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"
+ departure: "Départ"
+ arrival: "Arrivée"
+ time_tables: "Liste des calendriers"
+ bounding: "De %{start} à %{end}"
+ translation_form: "Cloner la course"
+ journey_frequencies: "Créneau horaire"
+ index:
+ title: "Horaires de la séquence d'arrêts %{route}"
+ vehicle_journeys: "Horaires de départ aux arrêts"
+ selection: "Filtrer sur"
+ selection_all: "Tous"
+ select_journey_patterns: "Sélectionner une mission"
+ select_time_tables: "Saisir un calendrier"
+ time_range: "Seuil horaire au départ"
+ advanced_search: "Recherche avancée"
+ time_filter:
+ time_range_filter: "Filtrer"
+ sidebar:
+ timeless: "Courses sans horaire"
+ activerecord:
+ models:
+ vehicle_journey:
+ zero: "course"
+ one: "course"
+ other: "courses"
+ attributes:
+ vehicle_journey:
+ line: "Ligne"
+ route: "Séquence d'arrêt"
+ journey_pattern: "Mission"
+ time_tables: "Calendriers"
+ time_slot: "Fréquence"
+ company: "Transporteur"
+ number: "Numéro"
+ comment: "Commentaires"
+ status_value: "Etat de trafic"
+ transport_mode_name: "Mode de transport"
+ mobility_restricted_suitability: "Accessibilité PMR"
+ flexible_service: "Transport à la demande"
+ unspecified_mrs: "Non spécifié"
+ accessible: "Accessible"
+ not_accessible: "Non accessible"
+ unspecified_fs: "Non spécifié"
+ on_demand_fs: "Service à la demande"
+ regular_fs: "Service régulier"
+ published_journey_name: "Nom public"
+ published_journey_identifier: "Identifiant public"
+ facility: "Equipement"
+ vehicle_type_identifier: "Type d'identifiant du véhicule"
+ time_table_ids: "Liste des calendriers"
+ vehicle_journey_at_stop_ids: "Liste des horaires"
+ journey_frequency_ids: "Créneau horaire"
+ objectid: "Identifiant Neptune"
+ object_version: "Version"
+ creation_time: "Créé le"
+ creator_id: "Créé par"
+ footnote_ids: "Notes de bas de page"
+ errors:
+ models:
+ vehicle_journey:
+ invalid_times: "Horaires invalides"
+ formtastic:
+ titles:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ neptune:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ netex:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ gtfs:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ hub:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 8."
diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml
deleted file mode 100644
index 9b872b222..000000000
--- a/config/locales/vehicle_journeys.yml
+++ /dev/null
@@ -1,228 +0,0 @@
-en:
- vehicle_journeys:
- vehicle_journeys:
- line_routes: "Line's routes"
- vehicle_journey:
- title_stopless: "Vehicle journey %{name}"
- title: "Vehicle journey leaving from %{stop} at %{time}"
- actions:
- index: "Vehicle time's board"
- new: "Add a new vehicle journey"
- edit: "Edit this vehicle journey"
- destroy: "Remove this vehicle journey"
- destroy_confirm: "Are you sure you want destroy this vehicle journey?"
- new:
- title: "Add a new vehicle journey"
- edit:
- title_stopless: "Update vehicle journey %{name}"
- title: "Update vehicle journey %{name} leaving from %{stop} at %{time}"
- form:
- stop_title: "Stop"
- departure: "Departure"
- arrival: "Arrival"
- to_arrivals: "Copy departures to arrivals"
- to_departures: "Copy arrivals to departures"
- time_tables: "Associated calendars to vehicle journey"
- slide: "Shift"
- slide_title: "Shift all vehicle passing times"
- set: "Set"
- to: "at"
- slide_departure: "departure time at first stop"
- slide_arrival: "arrival time at first stop"
- timeless:
- title: "Timeless vehicle journeys"
- vehicle_journeys: "Vehicle journeys with times at stop"
- vehicles_list: "Vehicle journeys list"
- show:
- title: "Vehicle Journey %{vehicle journey}"
- stop_title: "Stop"
- departure: "Departure"
- arrival: "Arrival"
- time_tables: "Calendars list"
- bounding: "From %{start} to %{end}"
- translation_form: "Vehicle journey translations"
- index:
- title: "Vehicle journeys on route %{route}"
- vehicle_journeys: "Departure's times"
- selection: "Filter on"
- selection_all: "All"
- select_journey_patterns: "Select journey pattern"
- select_time_tables: "Enter a timetable"
- time_range: "Departure time threshold"
- advanced_search: "Advanced Search"
- sidebar:
- timeless: "Timeless vehicle journeys"
- time_filter:
- time_range_filter: "Filter"
- activerecord:
- models:
- vehicle_journey:
- zero: "vehicle journey"
- one: "vehicle journey"
- other: "vehicle journeys"
- attributes:
- vehicle_journey:
- line: "Line"
- route: "Route"
- journey_pattern: "Journey Pattern"
- time_tables: "Calendars"
- time_slot: "Time Slot"
- company: "Company"
- number: "Number"
- comment: "Comments"
- status_value: "Status Value"
- transport_mode_name: "Transport Mode"
- mobility_restricted_suitability: "PRM accessibility"
- flexible_service: "On demond transportation"
- unspecified_mrs: "Not specified"
- accessible: "Accessible"
- not_accessible: "Not accessible"
- unspecified_fs: "Not specified"
- on_demaond_fs: "On demond service"
- regular_fs: "Regular service"
- published_journey_name: "Published Name"
- published_journey_identifier: "Published Identifier"
- facility: "Facility"
- vehicletypeidentifier: "Vehicle Type Identifier"
- time_table_ids: "Calendar list"
- vehicle_journey_at_stop_ids: "Time list"
- objectid: "Neptune identifier"
- object_version: "Version"
- creation_time: "Created on"
- creator_id: "Created by"
- footnote_ids: "Footnotes"
- errors:
- models:
- vehicle_journey:
- invalid_times: "Invalid times"
- formtastic:
- titles:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- neptune:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- netex:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- gtfs:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- hub:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 8."
-
-fr:
- vehicle_journeys:
- vehicle_journeys:
- line_routes: "Séquences d'arrêts de la ligne"
- vehicle_journey:
- title_stopless: "Course %{name}"
- title: "Course partant de %{stop} à %{time}"
- actions:
- index: "Horaires des courses"
- new: "Ajouter une course"
- edit: "Modifier cette course"
- destroy: "Supprimer cette course"
- destroy_confirm: "Etes vous sûr de supprimer cette course ?"
- new:
- title: "Ajouter une course"
- edit:
- title_stopless: "Modifier la course %{name}"
- title: "Modifier la course partant de %{stop} à %{time}"
- form:
- stop_title: "Arrêt"
- departure: "Départ"
- arrival: "Arrivée"
- to_arrivals: "Copie départs vers arrivées"
- to_departures: "Copie arrivées vers départs"
- time_tables: "Calendriers associés à la course"
- slide: "Décaler"
- slide_title: "Décaler l'ensemble des horaires de course"
- set: "Fixer"
- to: "à"
- slide_departure: "horaire de départ au 1° arrêt à"
- slide_arrival: "horaire d'arrivée au 1° arrêt à"
- 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"
- departure: "Départ"
- arrival: "Arrivée"
- time_tables: "Liste des calendriers"
- bounding: "De %{start} à %{end}"
- translation_form: "Cloner la course"
- index:
- title: "Horaires de la séquence d'arrêts %{route}"
- vehicle_journeys: "Horaires de départ aux arrêts"
- selection: "Filtrer sur"
- selection_all: "Tous"
- select_journey_patterns: "Sélectionner une mission"
- select_time_tables: "Saisir un calendrier"
- time_range: "Seuil horaire au départ"
- advanced_search: "Recherche avancée"
- time_filter:
- time_range_filter: "Filtrer"
- sidebar:
- timeless: "Courses sans horaire"
- activerecord:
- models:
- vehicle_journey:
- zero: "course"
- one: "course"
- other: "courses"
- attributes:
- vehicle_journey:
- line: "Ligne"
- route: "Séquence d'arrêt"
- journey_pattern: "Mission"
- time_tables: "Calendriers"
- time_slot: "Fréquence"
- company: "Transporteur"
- number: "Numéro"
- comment: "Commentaires"
- status_value: "Etat de trafic"
- transport_mode_name: "Mode de transport"
- mobility_restricted_suitability: "Accessibilité PMR"
- flexible_service: "Transport à la demande"
- unspecified_mrs: "Non spécifié"
- accessible: "Accessible"
- not_accessible: "Non accessible"
- unspecified_fs: "Non spécifié"
- on_demaond_fs: "Service à la demande"
- regular_fs: "Service régulier"
- published_journey_name: "Nom public"
- published_journey_identifier: "Identifiant public"
- facility: "Equipement"
- vehicle_type_identifier: "Type d'identifiant du véhicule"
- time_table_ids: "Liste des calendriers"
- vehicle_journey_at_stop_ids: "Liste des horaires"
- objectid: "Identifiant Neptune"
- object_version: "Version"
- creation_time: "Créé le"
- creator_id: "Créé par"
- footnote_ids: "Notes de bas de page"
- errors:
- models:
- vehicle_journey:
- invalid_times: "Horaires invalides"
- formtastic:
- titles:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- neptune:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- netex:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- gtfs:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- hub:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 8."
-
diff --git a/config/locales/vehicle_translations.en.yml b/config/locales/vehicle_translations.en.yml
new file mode 100644
index 000000000..506310c36
--- /dev/null
+++ b/config/locales/vehicle_translations.en.yml
@@ -0,0 +1,21 @@
+en:
+ vehicle_translations:
+ success: "%{count} vehicle journeys created by translation"
+ failure: "Fail when creating vehicle journeys by translation"
+ translate_form:
+ set: "Set"
+ to: "at (hh:mm)"
+ first_stop_arrival_time: "Arrival time at first stop '%{stop_name}'"
+ first_stop_departure_time: "Departure time at first stop '%{stop_name}'"
+ 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"
diff --git a/config/locales/vehicle_translations.yml b/config/locales/vehicle_translations.fr.yml
index a1e33b8e4..22222e27e 100644
--- a/config/locales/vehicle_translations.yml
+++ b/config/locales/vehicle_translations.fr.yml
@@ -1,24 +1,3 @@
-en:
- vehicle_translations:
- success: "%{count} vehicle journeys created by translation"
- failure: "Fail when creating vehicle journeys by translation"
- translate_form:
- set: "Set"
- to: "at (hh:mm)"
- first_stop_arrival_time: "Arrival time at first stop '%{stop_name}'"
- first_stop_departure_time: "Departure time at first stop '%{stop_name}'"
- 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"
@@ -41,4 +20,3 @@ fr:
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/config/locales/waybacks.yml b/config/locales/waybacks.en.yml
index c3bf8cc3d..e6d3234e1 100644
--- a/config/locales/waybacks.yml
+++ b/config/locales/waybacks.en.yml
@@ -3,9 +3,3 @@ en:
label:
straight_forward: "straight forward"
backward: "backward"
-fr:
- waybacks:
- label:
- straight_forward: "aller"
- backward: "retour"
-
diff --git a/config/locales/waybacks.fr.yml b/config/locales/waybacks.fr.yml
new file mode 100644
index 000000000..4c6ed0036
--- /dev/null
+++ b/config/locales/waybacks.fr.yml
@@ -0,0 +1,5 @@
+fr:
+ waybacks:
+ label:
+ straight_forward: "aller"
+ backward: "retour"
diff --git a/config/locales/will_paginate.en.yml b/config/locales/will_paginate.en.yml
new file mode 100644
index 000000000..8d9d27800
--- /dev/null
+++ b/config/locales/will_paginate.en.yml
@@ -0,0 +1,20 @@
+en:
+ will_paginate:
+ previous_label: "&#8592; Previous"
+ next_label: "Next &#8594;"
+ page_gap: "&hellip;"
+
+ page_entries_info:
+ search: "Results :"
+ list: "Paginated list"
+ single_page:
+ zero: "No item found"
+ one: "1 %{model} shown"
+ other: "%{count} %{model} shown"
+ single_page_html:
+ zero: "No item found"
+ one: "<b>1</b> %{model} shown"
+ other: "<b>%{count}</b> %{model} shown"
+
+ multi_page: "%{model} %{from} - %{to} of %{count} "
+ multi_page_html: "%{model} <b>%{from}&nbsp;-&nbsp;%{to}</b> of <b>%{count}</b> "
diff --git a/config/locales/will_paginate.yml b/config/locales/will_paginate.fr.yml
index 4793c962c..68963ea4a 100644
--- a/config/locales/will_paginate.yml
+++ b/config/locales/will_paginate.fr.yml
@@ -1,24 +1,3 @@
-en:
- will_paginate:
- previous_label: "&#8592; Previous"
- next_label: "Next &#8594;"
- page_gap: "&hellip;"
-
- page_entries_info:
- search: "Results :"
- list: "Paginated list"
- single_page:
- zero: "No item found"
- one: "1 %{model} shown"
- other: "%{count} %{model} shown"
- single_page_html:
- zero: "No item found"
- one: "<b>1</b> %{model} shown"
- other: "<b>%{count}</b> %{model} shown"
-
- multi_page: "%{model} %{from} - %{to} of %{count} "
- multi_page_html: "%{model} <b>%{from}&nbsp;-&nbsp;%{to}</b> of <b>%{count}</b> "
-
fr:
will_paginate:
previous_label: "&#8592; Précédent"
diff --git a/config/newrelic.yml b/config/newrelic.yml
index 95df17b31..b68e5c5ca 100644
--- a/config/newrelic.yml
+++ b/config/newrelic.yml
@@ -1,19 +1,22 @@
+#
# This file configures the New Relic Agent. New Relic monitors Ruby, Java,
# .NET, PHP, Python and Node applications with deep visibility and low
# overhead. For more information, visit www.newrelic.com.
#
-# Generated May 27, 2015
+# Generated November 09, 2015
+#
+# This configuration file is custom generated for Cityway Paris
#
# For full documentation of agent configuration options, please refer to
# https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ruby-agent-configuration
common: &default_settings
# Required license key associated with your New Relic account.
- license_key: to_be_overridden
+ license_key: <%= Rails.application.secrets.newrelic_licence_key %>
# Your application name. Renaming here affects where data displays in New
# Relic. For more details, see https://docs.newrelic.com/docs/apm/new-relic-apm/maintenance/renaming-applications
- app_name: Chouette
+ app_name: Chouette2
# To disable the agent regardless of other settings, uncomment the following:
# agent_enabled: false
@@ -21,17 +24,17 @@ common: &default_settings
# Logging level for log/newrelic_agent.log
log_level: info
+
# Environment-specific settings are in this section.
# RAILS_ENV or RACK_ENV (as appropriate) is used to determine the environment.
# If your application has other named environments, configure them here.
development:
<<: *default_settings
- app_name: Chouette (Development)
+ app_name: Chouette2 (Development)
# NOTE: There is substantial overhead when running in developer mode.
# Do not use for production or load testing.
developer_mode: true
- monitor_mode: false
test:
<<: *default_settings
@@ -40,7 +43,7 @@ test:
staging:
<<: *default_settings
- app_name: Chouette (Staging)
+ app_name: Chouette2 (Staging)
production:
<<: *default_settings
diff --git a/config/routes.rb b/config/routes.rb
index 29ef9eff1..5f899292a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -46,6 +46,8 @@ ChouetteIhm::Application.routes.draw do
resources :api_keys
resources :autocomplete_stop_areas
resources :autocomplete_time_tables
+ resources :autocomplete_route_sections
+ resources :autocomplete_timebands
resources :group_of_lines do
collection do
get 'name_filter'
@@ -69,8 +71,11 @@ ChouetteIhm::Application.routes.draw do
member do
get 'new_vehicle_journey'
end
+ resource :route_sections_selector, path: 'sections' do
+ post 'selection'
+ end
end
- resources :vehicle_journeys do
+ resources :vehicle_journeys, :vehicle_journey_frequencies do
get 'select_journey_pattern', :on => :member
resources :vehicle_translations
resources :time_tables
@@ -133,6 +138,8 @@ ChouetteIhm::Application.routes.draw do
resources :time_table_combinations
end
+ resources :timebands
+
resources :access_points do
resources :access_links
end
@@ -161,6 +168,11 @@ ChouetteIhm::Application.routes.draw do
end
resources :clean_ups
+ resources :route_sections do
+ collection do
+ get 'create_to_edit'
+ end
+ end
end
root :to => "referentials#index"
diff --git a/config/secrets.yml b/config/secrets.yml
index 3f38dd3e7..8b1ad59e2 100644
--- a/config/secrets.yml
+++ b/config/secrets.yml
@@ -15,6 +15,7 @@ development:
api_endpoint: "http://localhost:8080/chouette_iev/"
google_analytic_tracker: "UA-AAAAAAAA"
# geoportail_api_key: "aaaaaaaaaaaaaaaaaaaaaa"
+ newrelic_licence_key: ""
test:
secret_key_base: 54f61aab23322611dd0bbf73b7f034db34281f7f4b3c4992eaaff20ecc9673bbd467beaa6fcb48379ca69b80bc5662deac4e33ca144f2482146123d3e966016a
@@ -29,3 +30,4 @@ production:
api_endpoint: "http://localhost:8080/chouette_iev/"
google_analytic_tracker: "UA-AAAAAAAA"
# geoportail_api_key: "aaaaaaaaaaaaaaaaaaaaaa"
+ newrelic_licence_key: ""
diff --git a/db/migrate/20150529134410_create_route_sections.ninoxe_engine.rb b/db/migrate/20150529134410_create_route_sections.ninoxe_engine.rb
new file mode 100644
index 000000000..8e288c8ab
--- /dev/null
+++ b/db/migrate/20150529134410_create_route_sections.ninoxe_engine.rb
@@ -0,0 +1,18 @@
+class CreateRouteSections < ActiveRecord::Migration
+ def change
+ create_table :route_sections do |t|
+ t.belongs_to :departure, limit: 8
+ t.belongs_to :arrival, limit: 8
+
+ t.line_string :input_geometry, srid: 4326
+ t.line_string :processed_geometry, srid: 4326
+
+ t.string :objectid, null: false
+ t.integer :object_version
+ t.datetime :creation_time
+ t.string :creator_id
+ end
+ add_foreign_key :route_sections, :stop_areas, column: :departure_id, dependent: :delete
+ add_foreign_key :route_sections, :stop_areas, column: :arrival_id, dependent: :delete
+ end
+end
diff --git a/db/migrate/20150703141935_remove_uniqueness_for_registration_number.ninoxe_engine.rb b/db/migrate/20150703141935_remove_uniqueness_for_registration_number.ninoxe_engine.rb
new file mode 100644
index 000000000..a9e6d6d84
--- /dev/null
+++ b/db/migrate/20150703141935_remove_uniqueness_for_registration_number.ninoxe_engine.rb
@@ -0,0 +1,23 @@
+# This migration comes from ninoxe_engine (originally 20150630135517)
+class RemoveUniquenessForRegistrationNumber < ActiveRecord::Migration
+ def up
+ remove_index "lines", name: "lines_registration_number_key" if index_exists?(:lines, :registration_number, name: "lines_registration_number_key")
+ add_index "lines", ["registration_number"], :name => "lines_registration_number_key"
+
+ remove_index "companies", name: "companies_registration_number_key" if index_exists?(:companies, :registration_number, name: "companies_registration_number_key")
+ add_index "companies", ["registration_number"], :name => "companies_registration_number_key"
+
+ remove_index "networks", name: "networks_registration_number_key" if index_exists?(:networks, :registration_number, name: "networks_registration_number_key")
+ add_index "networks", ["registration_number"], :name => "networks_registration_number_key"
+ end
+ def down
+ remove_index "lines", name: "lines_registration_number_key" if index_exists?(:lines, :registration_number, name: "lines_registration_number_key")
+ add_index "lines", ["registration_number"], :name => "lines_registration_number_key", :unique => true
+
+ remove_index "companies", name: "companies_registration_number_key" if index_exists?(:companies, :registration_number, name: "companies_registration_number_key")
+ add_index "companies", ["registration_number"], :name => "companies_registration_number_key", :unique => true
+
+ remove_index "networks", name: "networks_registration_number_key" if index_exists?(:networks, :registration_number, name: "networks_registration_number_key")
+ add_index "networks", ["registration_number"], :name => "networks_registration_number_key", :unique => true
+ end
+end
diff --git a/db/migrate/20150922095511_add_stable_id_to_line.ninoxe_engine.rb b/db/migrate/20150922095511_add_stable_id_to_line.ninoxe_engine.rb
new file mode 100644
index 000000000..847a15668
--- /dev/null
+++ b/db/migrate/20150922095511_add_stable_id_to_line.ninoxe_engine.rb
@@ -0,0 +1,8 @@
+# This migration comes from ninoxe_engine (originally 20150922093109)
+class AddStableIdToLine < ActiveRecord::Migration
+ def change
+ change_table :lines do |t|
+ t.string :stable_id
+ end
+ end
+end
diff --git a/db/migrate/20150922103725_add_distance_to_route_sections.ninoxe_engine.rb b/db/migrate/20150922103725_add_distance_to_route_sections.ninoxe_engine.rb
new file mode 100644
index 000000000..321248039
--- /dev/null
+++ b/db/migrate/20150922103725_add_distance_to_route_sections.ninoxe_engine.rb
@@ -0,0 +1,8 @@
+# This migration comes from ninoxe_engine (originally 20150921100000)
+class AddDistanceToRouteSections < ActiveRecord::Migration
+
+ def change
+ add_column "route_sections", "distance", "float"
+ end
+
+end
diff --git a/db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb b/db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb
new file mode 100644
index 000000000..e5c763ab7
--- /dev/null
+++ b/db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb
@@ -0,0 +1,14 @@
+# This migration comes from ninoxe_engine (originally 20151015143707)
+class CreateJourneyFrequencies < ActiveRecord::Migration
+ def change
+ create_table :journey_frequencies do |t|
+ t.references :vehicle_journey, index: true
+ t.time :scheduled_headway_interval, null: false
+ t.time :first_departure_time, null: false
+ t.time :last_departure_time
+ t.boolean :exact_time, default: false
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20151022150419_add_journey_category_to_vehicle_journey.ninoxe_engine.rb b/db/migrate/20151022150419_add_journey_category_to_vehicle_journey.ninoxe_engine.rb
new file mode 100644
index 000000000..b8af53f24
--- /dev/null
+++ b/db/migrate/20151022150419_add_journey_category_to_vehicle_journey.ninoxe_engine.rb
@@ -0,0 +1,6 @@
+# This migration comes from ninoxe_engine (originally 20151022150156)
+class AddJourneyCategoryToVehicleJourney < ActiveRecord::Migration
+ def change
+ add_column :vehicle_journeys, :journey_category, :integer, null: false, default: 0
+ end
+end
diff --git a/db/migrate/20151023101306_create_timebands.ninoxe_engine.rb b/db/migrate/20151023101306_create_timebands.ninoxe_engine.rb
new file mode 100644
index 000000000..3758fdf09
--- /dev/null
+++ b/db/migrate/20151023101306_create_timebands.ninoxe_engine.rb
@@ -0,0 +1,16 @@
+# This migration comes from ninoxe_engine (originally 20151023083836)
+class CreateTimebands < ActiveRecord::Migration
+ def change
+ create_table :timebands do |t|
+ t.string "objectid", :null => false
+ t.integer "object_version"
+ t.datetime "creation_time"
+ t.string "creator_id"
+ t.string :name
+ t.time :start_time, null: false
+ t.time :end_time, null: false
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb b/db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb
new file mode 100644
index 000000000..094efa005
--- /dev/null
+++ b/db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb
@@ -0,0 +1,6 @@
+# This migration comes from ninoxe_engine (originally 20151028105340)
+class AddTimebandIdToJourneyFrequencies < ActiveRecord::Migration
+ def change
+ add_reference :journey_frequencies, :timeband, index: true
+ end
+end
diff --git a/db/migrate/20151111210749_add_no_processing_to_route_sections.ninoxe_engine.rb b/db/migrate/20151111210749_add_no_processing_to_route_sections.ninoxe_engine.rb
new file mode 100644
index 000000000..d5665fb6a
--- /dev/null
+++ b/db/migrate/20151111210749_add_no_processing_to_route_sections.ninoxe_engine.rb
@@ -0,0 +1,8 @@
+# This migration comes from ninoxe_engine (originally 2015110517100832)
+class AddNoProcessingToRouteSections < ActiveRecord::Migration
+
+ def change
+ add_column :route_sections, :no_processing, :boolean
+ end
+
+end
diff --git a/db/migrate/20151124144252_remove_waiting_time_elapse_duration_headway_frequency_to_vehicle_journey_at_stops.ninoxe_engine.rb b/db/migrate/20151124144252_remove_waiting_time_elapse_duration_headway_frequency_to_vehicle_journey_at_stops.ninoxe_engine.rb
new file mode 100644
index 000000000..17b1fe74b
--- /dev/null
+++ b/db/migrate/20151124144252_remove_waiting_time_elapse_duration_headway_frequency_to_vehicle_journey_at_stops.ninoxe_engine.rb
@@ -0,0 +1,14 @@
+# This migration comes from ninoxe_engine (originally 20151124144002)
+class RemoveWaitingTimeElapseDurationHeadwayFrequencyToVehicleJourneyAtStops < ActiveRecord::Migration
+ def up
+ remove_column :vehicle_journey_at_stops, :waiting_time
+ remove_column :vehicle_journey_at_stops, :elapse_duration
+ remove_column :vehicle_journey_at_stops, :headway_frequency
+ end
+
+ def down
+ add_column :vehicle_journey_at_stops, :waiting_time, :time
+ add_column :vehicle_journey_at_stops, :elapse_duration, :time
+ add_column :vehicle_journey_at_stops, :headway_frequency, :time
+ end
+end
diff --git a/db/migrate/20151124145000_remove_time_slot_id_from_vehicle_journey.ninoxe_engine.rb b/db/migrate/20151124145000_remove_time_slot_id_from_vehicle_journey.ninoxe_engine.rb
new file mode 100644
index 000000000..41b77df7e
--- /dev/null
+++ b/db/migrate/20151124145000_remove_time_slot_id_from_vehicle_journey.ninoxe_engine.rb
@@ -0,0 +1,11 @@
+# This migration comes from ninoxe_engine (originally 20151124145000)
+class RemoveTimeSlotIdFromVehicleJourney < ActiveRecord::Migration
+ def up
+ if column_exists? :vehicle_journeys, :time_slot_id
+ remove_column :vehicle_journeys, :time_slot_id
+ end
+ end
+ def down
+ add_column :vehicle_journeys, :time_slot_id, "integer", {:limit => 8}
+ end
+end
diff --git a/db/migrate/20151124145300_drop_time_slots.ninoxe_engine.rb b/db/migrate/20151124145300_drop_time_slots.ninoxe_engine.rb
new file mode 100644
index 000000000..62ed40758
--- /dev/null
+++ b/db/migrate/20151124145300_drop_time_slots.ninoxe_engine.rb
@@ -0,0 +1,6 @@
+# This migration comes from ninoxe_engine (originally 20151124145016)
+class DropTimeSlots < ActiveRecord::Migration
+ def change
+ drop_table :time_slots
+ end
+end
diff --git a/db/migrate/20151203132113_create_journey_pattern_sections.ninoxe_engine.rb b/db/migrate/20151203132113_create_journey_pattern_sections.ninoxe_engine.rb
new file mode 100644
index 000000000..254e64567
--- /dev/null
+++ b/db/migrate/20151203132113_create_journey_pattern_sections.ninoxe_engine.rb
@@ -0,0 +1,16 @@
+# This migration comes from ninoxe_engine (originally 20151203131606)
+class CreateJourneyPatternSections < ActiveRecord::Migration
+ def change
+ create_table :journey_pattern_sections do |t|
+ t.references :journey_pattern, null: false, index: true, limit: 8
+ t.references :route_section, null: false, index: true, limit: 8
+ t.integer :rank, null: false
+ t.foreign_key :journey_patterns, dependent: :delete
+ t.foreign_key :route_sections, dependent: :delete
+
+ t.timestamps
+ end
+ add_index :journey_pattern_sections, [:journey_pattern_id, :route_section_id, :rank],
+ unique: true, name: 'index_jps_on_journey_pattern_id_and_route_section_id_and_rank'
+ end
+end
diff --git a/db/migrate/20151204102348_add_section_status_to_journey_pattern.ninoxe_engine.rb b/db/migrate/20151204102348_add_section_status_to_journey_pattern.ninoxe_engine.rb
new file mode 100644
index 000000000..946705928
--- /dev/null
+++ b/db/migrate/20151204102348_add_section_status_to_journey_pattern.ninoxe_engine.rb
@@ -0,0 +1,6 @@
+# This migration comes from ninoxe_engine (originally 20151204102248)
+class AddSectionStatusToJourneyPattern < ActiveRecord::Migration
+ def change
+ add_column :journey_patterns, :section_status, :integer, null: false, default: 0
+ end
+end
diff --git a/db/migrate/20151215175635_add_limit_and_foreign_key_to_journey_frequencies.ninoxe_engine.rb b/db/migrate/20151215175635_add_limit_and_foreign_key_to_journey_frequencies.ninoxe_engine.rb
new file mode 100644
index 000000000..fc8869f1c
--- /dev/null
+++ b/db/migrate/20151215175635_add_limit_and_foreign_key_to_journey_frequencies.ninoxe_engine.rb
@@ -0,0 +1,16 @@
+# This migration comes from ninoxe_engine (originally 20151215175245)
+class AddLimitAndForeignKeyToJourneyFrequencies < ActiveRecord::Migration
+ def up
+ change_column :journey_frequencies, :vehicle_journey_id, :integer, limit: 8
+ change_column :journey_frequencies, :timeband_id, :integer, limit: 8
+ add_foreign_key :journey_frequencies, :vehicle_journeys, dependent: :nullify
+ add_foreign_key :journey_frequencies, :timebands, dependent: :nullify
+ end
+
+ def down
+ change_column :journey_frequencies, :vehicle_journey_id, :integer, limit: 4
+ change_column :journey_frequencies, :timeband_id, :integer, limit: 4
+ remove_foreign_key :journey_frequencies, :vehicle_journeys
+ remove_foreign_key :journey_frequencies, :timebands
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 97bf1836e..66f80a16c 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,10 +11,11 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20150526081746) do
+ActiveRecord::Schema.define(version: 20151215175635) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
+ enable_extension "postgis"
create_table "access_links", force: true do |t|
t.integer "access_point_id", limit: 8
@@ -38,7 +39,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "link_orientation"
end
- add_index "access_links", ["objectid"], name: "access_links_objectid_key", unique: true, using: :btree
+ add_index "access_links", ["objectid"], :name => "access_links_objectid_key", :unique => true
create_table "access_points", force: true do |t|
t.string "objectid"
@@ -64,7 +65,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "city_name"
end
- add_index "access_points", ["objectid"], name: "access_points_objectid_key", unique: true, using: :btree
+ add_index "access_points", ["objectid"], :name => "access_points_objectid_key", :unique => true
create_table "api_keys", force: true do |t|
t.integer "referential_id"
@@ -92,8 +93,8 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "time_zone"
end
- add_index "companies", ["objectid"], name: "companies_objectid_key", unique: true, using: :btree
- add_index "companies", ["registration_number"], name: "companies_registration_number_key", unique: true, using: :btree
+ add_index "companies", ["objectid"], :name => "companies_objectid_key", :unique => true
+ add_index "companies", ["registration_number"], :name => "companies_registration_number_key"
create_table "connection_links", force: true do |t|
t.integer "departure_id", limit: 8
@@ -116,7 +117,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.integer "int_user_needs"
end
- add_index "connection_links", ["objectid"], name: "connection_links_objectid_key", unique: true, using: :btree
+ add_index "connection_links", ["objectid"], :name => "connection_links_objectid_key", :unique => true
create_table "delayed_jobs", force: true do |t|
t.integer "priority", default: 0
@@ -132,7 +133,20 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.datetime "updated_at"
end
- add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree
+ add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
+
+ create_table "exports", force: true do |t|
+ t.integer "referential_id", limit: 8
+ t.string "status"
+ t.string "type"
+ t.string "options"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "references_type"
+ t.string "reference_ids"
+ end
+
+ add_index "exports", ["referential_id"], :name => "index_exports_on_referential_id"
create_table "facilities", force: true do |t|
t.integer "stop_area_id", limit: 8
@@ -158,7 +172,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "contained_in"
end
- add_index "facilities", ["objectid"], name: "facilities_objectid_key", unique: true, using: :btree
+ add_index "facilities", ["objectid"], :name => "facilities_objectid_key", :unique => true
create_table "facilities_features", id: false, force: true do |t|
t.integer "facility_id", limit: 8
@@ -188,16 +202,42 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "registration_number"
end
- add_index "group_of_lines", ["objectid"], name: "group_of_lines_objectid_key", unique: true, using: :btree
+ add_index "group_of_lines", ["objectid"], :name => "group_of_lines_objectid_key", :unique => true
create_table "group_of_lines_lines", id: false, force: true do |t|
t.integer "group_of_line_id", limit: 8
t.integer "line_id", limit: 8
end
+ create_table "journey_frequencies", force: true do |t|
+ t.integer "vehicle_journey_id", limit: 8
+ t.time "scheduled_headway_interval", null: false
+ t.time "first_departure_time", null: false
+ t.time "last_departure_time"
+ t.boolean "exact_time", default: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "timeband_id", limit: 8
+ end
+
+ add_index "journey_frequencies", ["timeband_id"], :name => "index_journey_frequencies_on_timeband_id"
+ add_index "journey_frequencies", ["vehicle_journey_id"], :name => "index_journey_frequencies_on_vehicle_journey_id"
+
+ create_table "journey_pattern_sections", force: true do |t|
+ t.integer "journey_pattern_id", limit: 8, null: false
+ t.integer "route_section_id", limit: 8, null: false
+ t.integer "rank", null: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "journey_pattern_sections", ["journey_pattern_id", "route_section_id", "rank"], :name => "index_jps_on_journey_pattern_id_and_route_section_id_and_rank", :unique => true
+ add_index "journey_pattern_sections", ["journey_pattern_id"], :name => "index_journey_pattern_sections_on_journey_pattern_id"
+ add_index "journey_pattern_sections", ["route_section_id"], :name => "index_journey_pattern_sections_on_route_section_id"
+
create_table "journey_patterns", force: true do |t|
t.integer "route_id", limit: 8
- t.string "objectid", null: false
+ t.string "objectid", null: false
t.integer "object_version"
t.datetime "creation_time"
t.string "creator_id"
@@ -207,16 +247,17 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "published_name"
t.integer "departure_stop_point_id", limit: 8
t.integer "arrival_stop_point_id", limit: 8
+ t.integer "section_status", default: 0, null: false
end
- add_index "journey_patterns", ["objectid"], name: "journey_patterns_objectid_key", unique: true, using: :btree
+ add_index "journey_patterns", ["objectid"], :name => "journey_patterns_objectid_key", :unique => true
create_table "journey_patterns_stop_points", id: false, force: true do |t|
t.integer "journey_pattern_id", limit: 8
t.integer "stop_point_id", limit: 8
end
- add_index "journey_patterns_stop_points", ["journey_pattern_id"], name: "index_journey_pattern_id_on_journey_patterns_stop_points", using: :btree
+ add_index "journey_patterns_stop_points", ["journey_pattern_id"], :name => "index_journey_pattern_id_on_journey_patterns_stop_points"
create_table "lines", force: true do |t|
t.integer "network_id", limit: 8
@@ -237,10 +278,11 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "url"
t.string "color", limit: 6
t.string "text_color", limit: 6
+ t.string "stable_id"
end
- add_index "lines", ["objectid"], name: "lines_objectid_key", unique: true, using: :btree
- add_index "lines", ["registration_number"], name: "lines_registration_number_key", unique: true, using: :btree
+ add_index "lines", ["objectid"], :name => "lines_objectid_key", :unique => true
+ add_index "lines", ["registration_number"], :name => "lines_registration_number_key"
create_table "networks", force: true do |t|
t.string "objectid", null: false
@@ -257,8 +299,8 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "comment"
end
- add_index "networks", ["objectid"], name: "networks_objectid_key", unique: true, using: :btree
- add_index "networks", ["registration_number"], name: "networks_registration_number_key", unique: true, using: :btree
+ add_index "networks", ["objectid"], :name => "networks_objectid_key", :unique => true
+ add_index "networks", ["registration_number"], :name => "networks_registration_number_key"
create_table "organisations", force: true do |t|
t.string "name"
@@ -280,7 +322,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.decimal "link_distance", precision: 19, scale: 2
end
- add_index "pt_links", ["objectid"], name: "pt_links_objectid_key", unique: true, using: :btree
+ add_index "pt_links", ["objectid"], :name => "pt_links_objectid_key", :unique => true
create_table "referentials", force: true do |t|
t.string "name"
@@ -298,6 +340,19 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "data_format"
end
+ create_table "route_sections", force: true do |t|
+ t.integer "departure_id", limit: 8
+ t.integer "arrival_id", limit: 8
+ t.string "objectid", null: false
+ t.integer "object_version"
+ t.datetime "creation_time"
+ t.string "creator_id"
+ t.spatial "input_geometry", limit: {:srid=>4326, :type=>"line_string"}
+ t.spatial "processed_geometry", limit: {:srid=>4326, :type=>"line_string"}
+ t.float "distance"
+ t.boolean "no_processing"
+ end
+
create_table "routes", force: true do |t|
t.integer "line_id", limit: 8
t.string "objectid", null: false
@@ -313,7 +368,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "wayback"
end
- add_index "routes", ["objectid"], name: "routes_objectid_key", unique: true, using: :btree
+ add_index "routes", ["objectid"], :name => "routes_objectid_key", :unique => true
create_table "routing_constraints_lines", id: false, force: true do |t|
t.integer "stop_area_id", limit: 8
@@ -355,8 +410,8 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "time_zone"
end
- add_index "stop_areas", ["objectid"], name: "stop_areas_objectid_key", unique: true, using: :btree
- add_index "stop_areas", ["parent_id"], name: "index_stop_areas_on_parent_id", using: :btree
+ add_index "stop_areas", ["objectid"], :name => "stop_areas_objectid_key", :unique => true
+ add_index "stop_areas", ["parent_id"], :name => "index_stop_areas_on_parent_id"
create_table "stop_areas_stop_areas", id: false, force: true do |t|
t.integer "child_id", limit: 8
@@ -375,7 +430,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "for_alighting"
end
- add_index "stop_points", ["objectid"], name: "stop_points_objectid_key", unique: true, using: :btree
+ add_index "stop_points", ["objectid"], :name => "stop_points_objectid_key", :unique => true
create_table "taggings", force: true do |t|
t.integer "tag_id"
@@ -387,29 +442,15 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.datetime "created_at"
end
- add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true, using: :btree
- add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree
+ add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], :name => "taggings_idx", :unique => true
+ add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
create_table "tags", force: true do |t|
t.string "name"
t.integer "taggings_count", default: 0
end
- add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree
-
- create_table "time_slots", force: true do |t|
- t.string "objectid", null: false
- t.integer "object_version"
- t.datetime "creation_time"
- t.string "creator_id"
- t.string "name"
- t.time "beginning_slot_time"
- t.time "end_slot_time"
- t.time "first_departure_time_in_slot"
- t.time "last_departure_time_in_slot"
- end
-
- add_index "time_slots", ["objectid"], name: "time_slots_objectid_key", unique: true, using: :btree
+ add_index "tags", ["name"], :name => "index_tags_on_name", :unique => true
create_table "time_table_dates", force: true do |t|
t.integer "time_table_id", limit: 8, null: false
@@ -418,7 +459,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.boolean "in_out"
end
- add_index "time_table_dates", ["time_table_id"], name: "index_time_table_dates_on_time_table_id", using: :btree
+ add_index "time_table_dates", ["time_table_id"], :name => "index_time_table_dates_on_time_table_id"
create_table "time_table_periods", force: true do |t|
t.integer "time_table_id", limit: 8, null: false
@@ -427,7 +468,7 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.integer "position", null: false
end
- add_index "time_table_periods", ["time_table_id"], name: "index_time_table_periods_on_time_table_id", using: :btree
+ add_index "time_table_periods", ["time_table_id"], :name => "index_time_table_periods_on_time_table_id"
create_table "time_tables", force: true do |t|
t.string "objectid", null: false
@@ -441,15 +482,27 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.date "end_date"
end
- add_index "time_tables", ["objectid"], name: "time_tables_objectid_key", unique: true, using: :btree
+ add_index "time_tables", ["objectid"], :name => "time_tables_objectid_key", :unique => true
create_table "time_tables_vehicle_journeys", id: false, force: true do |t|
t.integer "time_table_id", limit: 8
t.integer "vehicle_journey_id", limit: 8
end
- add_index "time_tables_vehicle_journeys", ["time_table_id"], name: "index_time_tables_vehicle_journeys_on_time_table_id", using: :btree
- add_index "time_tables_vehicle_journeys", ["vehicle_journey_id"], name: "index_time_tables_vehicle_journeys_on_vehicle_journey_id", using: :btree
+ add_index "time_tables_vehicle_journeys", ["time_table_id"], :name => "index_time_tables_vehicle_journeys_on_time_table_id"
+ add_index "time_tables_vehicle_journeys", ["vehicle_journey_id"], :name => "index_time_tables_vehicle_journeys_on_vehicle_journey_id"
+
+ create_table "timebands", force: true do |t|
+ t.string "objectid", null: false
+ t.integer "object_version"
+ t.datetime "creation_time"
+ t.string "creator_id"
+ t.string "name"
+ t.time "start_time", null: false
+ t.time "end_time", null: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
create_table "users", force: true do |t|
t.string "email", default: "", null: false
@@ -483,9 +536,9 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.datetime "invitation_created_at"
end
- add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
- add_index "users", ["invitation_token"], name: "index_users_on_invitation_token", unique: true, using: :btree
- add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
+ add_index "users", ["email"], :name => "index_users_on_email", :unique => true
+ add_index "users", ["invitation_token"], :name => "index_users_on_invitation_token", :unique => true
+ add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
create_table "vehicle_journey_at_stops", force: true do |t|
t.integer "vehicle_journey_id", limit: 8
@@ -494,22 +547,18 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.string "boarding_alighting_possibility"
t.time "arrival_time"
t.time "departure_time"
- t.time "waiting_time"
- t.time "elapse_duration"
- t.time "headway_frequency"
t.string "for_boarding"
t.string "for_alighting"
end
- add_index "vehicle_journey_at_stops", ["stop_point_id"], name: "index_vehicle_journey_at_stops_on_stop_pointid", using: :btree
- add_index "vehicle_journey_at_stops", ["vehicle_journey_id"], name: "index_vehicle_journey_at_stops_on_vehicle_journey_id", using: :btree
+ add_index "vehicle_journey_at_stops", ["stop_point_id"], :name => "index_vehicle_journey_at_stops_on_stop_pointid"
+ add_index "vehicle_journey_at_stops", ["vehicle_journey_id"], :name => "index_vehicle_journey_at_stops_on_vehicle_journey_id"
create_table "vehicle_journeys", force: true do |t|
t.integer "route_id", limit: 8
t.integer "journey_pattern_id", limit: 8
- t.integer "time_slot_id", limit: 8
t.integer "company_id", limit: 8
- t.string "objectid", null: false
+ t.string "objectid", null: false
t.integer "object_version"
t.datetime "creation_time"
t.string "creator_id"
@@ -523,11 +572,13 @@ ActiveRecord::Schema.define(version: 20150526081746) do
t.integer "number", limit: 8
t.boolean "mobility_restricted_suitability"
t.boolean "flexible_service"
+ t.integer "journey_category", default: 0, null: false
end
- add_index "vehicle_journeys", ["objectid"], name: "vehicle_journeys_objectid_key", unique: true, using: :btree
- add_index "vehicle_journeys", ["route_id"], name: "index_vehicle_journeys_on_route_id", using: :btree
+ add_index "vehicle_journeys", ["objectid"], :name => "vehicle_journeys_objectid_key", :unique => true
+ add_index "vehicle_journeys", ["route_id"], :name => "index_vehicle_journeys_on_route_id"
+ Foreigner.load
add_foreign_key "access_links", "access_points", name: "aclk_acpt_fkey", dependent: :delete
add_foreign_key "access_links", "stop_areas", name: "aclk_area_fkey", dependent: :delete
@@ -539,6 +590,12 @@ ActiveRecord::Schema.define(version: 20150526081746) do
add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", dependent: :delete
add_foreign_key "group_of_lines_lines", "lines", name: "groupofline_line_fkey", dependent: :delete
+ add_foreign_key "journey_frequencies", "timebands", name: "journey_frequencies_timeband_id_fk", dependent: :nullify
+ add_foreign_key "journey_frequencies", "vehicle_journeys", name: "journey_frequencies_vehicle_journey_id_fk", dependent: :nullify
+
+ add_foreign_key "journey_pattern_sections", "journey_patterns", name: "journey_pattern_sections_journey_pattern_id_fk", dependent: :delete
+ add_foreign_key "journey_pattern_sections", "route_sections", name: "journey_pattern_sections_route_section_id_fk", dependent: :delete
+
add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", dependent: :delete
add_foreign_key "journey_patterns", "stop_points", name: "arrival_point_fkey", column: "arrival_stop_point_id", dependent: :nullify
add_foreign_key "journey_patterns", "stop_points", name: "departure_point_fkey", column: "departure_stop_point_id", dependent: :nullify
@@ -549,6 +606,9 @@ ActiveRecord::Schema.define(version: 20150526081746) do
add_foreign_key "lines", "companies", name: "line_company_fkey", dependent: :nullify
add_foreign_key "lines", "networks", name: "line_ptnetwork_fkey", dependent: :nullify
+ add_foreign_key "route_sections", "stop_areas", name: "route_sections_arrival_id_fk", column: "arrival_id", dependent: :delete
+ add_foreign_key "route_sections", "stop_areas", name: "route_sections_departure_id_fk", column: "departure_id", dependent: :delete
+
add_foreign_key "routes", "lines", name: "route_line_fkey", dependent: :delete
add_foreign_key "routes", "routes", name: "route_opposite_route_fkey", column: "opposite_route_id", dependent: :nullify
diff --git a/lib/ievkit/error.rb b/lib/ievkit/error.rb
index c758ec71d..9550944ff 100644
--- a/lib/ievkit/error.rb
+++ b/lib/ievkit/error.rb
@@ -81,6 +81,14 @@ module Ievkit
end
end
+ def locale_for_error
+ if self.class.eql? Ievkit::NotFound
+ 'iev.exception.unknown_job'
+ else
+ 'iev.exception.default'
+ end
+ end
+
private
def data
diff --git a/lib/ninoxe_extension/hub/company_restrictions.rb b/lib/ninoxe_extension/hub/company_restrictions.rb
index 190b63cd2..ee194a046 100644
--- a/lib/ninoxe_extension/hub/company_restrictions.rb
+++ b/lib/ninoxe_extension/hub/company_restrictions.rb
@@ -9,14 +9,19 @@ module NinoxeExtension::Hub
# HUB-7
g.validate :specific_objectid
# HUB-8
- g.validates_format_of :name, :with => %r{\A[\w]{1,75}\z}
+ #g.validates_length_of :name, :minimum => 1, :maximum => 75
+ g.validates :name, length: { in: 1..75 }
# HUB-9
- g.validates_format_of :registration_number, :with => %r{\A[\d]{1,8}\z}
- g.validates_uniqueness_of :registration_number
+ #g.validates_format_of :registration_number, :with => %r{\A[\d]{1,8}\z}
+ #g.validates_uniqueness_of :registration_number
+ g.validates :registration_number,
+ uniqueness: true,
+ length: { in: 1..8 },
+ numericality: { only_integer: true }
end
end
def specific_objectid
- validate_specific_objectid( 3)
+ validate_specific_objectid(3)
end
end
end
diff --git a/lib/ninoxe_extension/hub/connection_link_restrictions.rb b/lib/ninoxe_extension/hub/connection_link_restrictions.rb
index bf433379b..6d4c3046f 100644
--- a/lib/ninoxe_extension/hub/connection_link_restrictions.rb
+++ b/lib/ninoxe_extension/hub/connection_link_restrictions.rb
@@ -6,9 +6,9 @@ module NinoxeExtension::Hub
included do
include ObjectidRestrictions
- with_options if: :hub_restricted? do |jp|
+ with_options if: :hub_restricted? do |cl|
# HUB-34
- jp.validates :link_distance, :numericality => { :max => 10000.0 }
+ cl.validates :link_distance, numericality: { less_than_or_equal_to: 10000.to_f }
end
end
end
diff --git a/lib/ninoxe_extension/hub/group_of_line_restrictions.rb b/lib/ninoxe_extension/hub/group_of_line_restrictions.rb
index d5de71ce0..26e5c5d5c 100644
--- a/lib/ninoxe_extension/hub/group_of_line_restrictions.rb
+++ b/lib/ninoxe_extension/hub/group_of_line_restrictions.rb
@@ -10,14 +10,19 @@ module NinoxeExtension::Hub
# HUB-11
g.validate :specific_objectid
# HUB-12
- g.validates_format_of :name, :with => %r{\A[\w]{1,75}\z}
+ #g.validates_length_of :name, :minimum => 1, :maximum => 75
+ g.validates :name, length: { in: 1..75 }
# HUB-13
- g.validates_format_of :registration_number, :with => %r{\A[\d]{1,8}\z}
- g.validates_uniqueness_of :registration_number
+ #g.validates_format_of :registration_number, :with => %r{\A[\d]{1,8}\z}
+ #g.validates_uniqueness_of :registration_number
+ g.validates :registration_number,
+ uniqueness: true,
+ numericality: { only_integer: true },
+ length: { in: 1..8 }
end
end
def specific_objectid
- validate_specific_objectid( 6)
+ validate_specific_objectid(6)
end
end
end
diff --git a/lib/ninoxe_extension/hub/journey_pattern_restrictions.rb b/lib/ninoxe_extension/hub/journey_pattern_restrictions.rb
index 448be9665..f3ec2cdbd 100644
--- a/lib/ninoxe_extension/hub/journey_pattern_restrictions.rb
+++ b/lib/ninoxe_extension/hub/journey_pattern_restrictions.rb
@@ -10,9 +10,10 @@ module NinoxeExtension::Hub
# HUB-39
jp.validate :specific_objectid
# HUB-40
- jp.validates :registration_number, :numericality => { :less_than => 10 ** 8 }
+ jp.validates :registration_number, numericality: { less_than: 10 ** 8 }
# HUB-41
- jp.validates_format_of :name, :with => %r{\A[\w]{0,75}\z}
+ #jp.validates_length_of :name, :maximum => 75, :allow_blank => true, :allow_nil => true
+ jp.validates :name, length: { maximum: 75 }, allow_blank: true
end
end
def specific_objectid
diff --git a/lib/ninoxe_extension/hub/line_restrictions.rb b/lib/ninoxe_extension/hub/line_restrictions.rb
index 616d1fd52..bdae3d77c 100644
--- a/lib/ninoxe_extension/hub/line_restrictions.rb
+++ b/lib/ninoxe_extension/hub/line_restrictions.rb
@@ -12,13 +12,16 @@ module NinoxeExtension::Hub
#l.validates_format_of :objectid, :with => %r{\A\w+:\w+:[\w]{1,14}\z}
l.validate :specific_objectid
# HUB-16
- l.validates_format_of :number, :with => %r{\A[\w]{1,6}\z}
- # HUB-17
- l.validates_format_of :name, :with => %r{\A[\w]{0,75}\z}
+ #l.validates_format_of :number, :with => %r{\A[\w]{1,6}\z}
+ l.validates :number, length: { in: 1..6 }, format: { with: /\A[\w]+\z/ }
+ # HUB-17 & HUB-22
+ #l.validates_length_of :name, :maximum => 75
+ l.validates :name, length: { maximum: 75 }, uniqueness: true, allow_blank: true
# HUB-21
- l.validates :registration_number, :numericality => { :less_than => 10 ** 8 }
+ #l.validates :registration_number, :numericality => { :less_than => 10 ** 8 }
+ l.validates :registration_number, presence: true, numericality: { less_than: 10 ** 8 }
# HUB-22
- l.validates_uniqueness_of :name, :allow_blank => true
+ #l.validates_uniqueness_of :name, :allow_blank => true
end
end
diff --git a/lib/ninoxe_extension/hub/network_restrictions.rb b/lib/ninoxe_extension/hub/network_restrictions.rb
index 7966736ec..deba1f75e 100644
--- a/lib/ninoxe_extension/hub/network_restrictions.rb
+++ b/lib/ninoxe_extension/hub/network_restrictions.rb
@@ -5,14 +5,19 @@ module NinoxeExtension::Hub
included do
include ObjectidRestrictions
- with_options if: :hub_restricted? do |g|
+ with_options if: :hub_restricted? do |n|
# HUB-3
- g.validate :specific_objectid
+ n.validate :specific_objectid
# HUB-4
- g.validates_format_of :name, :with => %r{\A[\w]{1,75}\z}
+ #n.validates_length_of :name, :minimum => 1, :maximum => 75
+ n.validates :name, length: { in: 1..75 }
# HUB-5
- g.validates_format_of :registration_number, :with => %r{\A[\d]{1,8}\z}
- g.validates_uniqueness_of :registration_number
+ #n.validates_format_of :registration_number, :with => %r{\A[\d]{1,8}\z}
+ #n.validates_uniqueness_of :registration_number
+ n.validates :registration_number,
+ uniqueness: true,
+ numericality: { only_integer: true },
+ length: { in: 1..8 }
end
end
def specific_objectid
diff --git a/lib/ninoxe_extension/hub/objectid_restrictions.rb b/lib/ninoxe_extension/hub/objectid_restrictions.rb
index a84e1428f..1a71b9e62 100644
--- a/lib/ninoxe_extension/hub/objectid_restrictions.rb
+++ b/lib/ninoxe_extension/hub/objectid_restrictions.rb
@@ -8,21 +8,21 @@ module NinoxeExtension::Hub::ObjectidRestrictions
end
def validate_specific_objectid( size_max )
- errors.add( :objectid, I18n.t('hub.invalid')) if ( %r{\A\w+:\w+:\w+\z}).match( self.objectid).nil?
+ #errors.add( :objectid, I18n.t('hub.invalid')) if ( %r{\A\w+:\w+:\w+\z}).match( self.objectid).nil?
if third_part_objectid.nil? || ( !third_part_objectid.include?( "_pending_" ) && third_part_objectid.size > size_max)
errors.add( :objectid, I18n.t('hub.invalid'))
end
end
def third_part_objectid
- return nil if ( %r{\A\w+:\w+:\w+\z}).match( self.objectid).nil?
- self.objectid.match(/:(\w+)\z/)[1]
+ return nil if ( %r{\A\w+:\w+:[0-9A-Za-z_-]+\z}).match( self.objectid).nil?
+ self.objectid.match(/:([0-9A-Za-z_-]+)\z/)[1]
end
def third_part_objectid_uniqueness
return unless hub_restricted?
return true unless third_part_objectid
- likes = Chouette::Line.where( "objectid LIKE ?", "%:#{self.third_part_objectid}" )
+ likes = self.class.where( "objectid LIKE ?", "%:#{self.third_part_objectid}" )
likes.size.zero? || ( likes.size==1 && likes.first.id==self.id)
end
end
diff --git a/lib/ninoxe_extension/hub/route_restrictions.rb b/lib/ninoxe_extension/hub/route_restrictions.rb
index 538995dc8..6304d3559 100644
--- a/lib/ninoxe_extension/hub/route_restrictions.rb
+++ b/lib/ninoxe_extension/hub/route_restrictions.rb
@@ -16,12 +16,12 @@ module NinoxeExtension::Hub
# HUB-37
def max_instance_limitation
return unless hub_restricted?
- errors.add( :flash, I18n.t('hub.routes.max_by_line'))
+ errors.add( :flash, I18n.t('hub.routes.max_by_line')) if 2 < line.routes.size
end
# HUB-38
with_options if: :hub_restricted? do |route|
- route.validates_format_of :objectid, :with => %r{\A\w+:\w+:[\w]{1,8}\z}
+ route.validates_format_of :objectid, :with => %r{\A\w+:\w+:([\w]{1,8}|__pending_id__\d+)\z}
end
end
end
diff --git a/lib/ninoxe_extension/hub/stop_area_restrictions.rb b/lib/ninoxe_extension/hub/stop_area_restrictions.rb
index 8701c291c..17df9dba1 100644
--- a/lib/ninoxe_extension/hub/stop_area_restrictions.rb
+++ b/lib/ninoxe_extension/hub/stop_area_restrictions.rb
@@ -10,50 +10,57 @@ module NinoxeExtension::Hub
self.area_type=="CommercialStopPoint"
end
def physical_hub_restricted?
- hub_restricted? && commercial?
+ hub_restricted? && physical?
end
def commercial_hub_restricted?
- hub_restricted? && physical?
+ hub_restricted? && commercial?
end
def commercial_and_physical_hub_restricted?
physical_hub_restricted? || commercial_hub_restricted?
end
- def specific_objectid
- validate_specific_objectid( 12)
- end
+ # def specific_objectid
+ # validate_specific_objectid( 12)
+ # end
included do
include ObjectidRestrictions
with_options if: :commercial_and_physical_hub_restricted? do |sa|
- # HUB-23
+ # HUB-23
sa.validate :specific_objectid
- sa.validates_format_of :name, :with => %r{\A[\w]{1,75}\z}
+ #sa.validates_length_of :name, :minimum => 1, :maximum => 75
+ sa.validates :name, length: { in: 1..75 }
end
+
with_options if: :commercial_hub_restricted? do |sa|
# HUB-24
- validates_format_of :nearest_topic_name, :with => %r{\A[\w]{0,255}\z}
+ #sa.validates_length_of :nearest_topic_name, :maximum => 255, :allow_blank => true, :allow_nil => true
+ sa.validates :nearest_topic_name, length: { maximum: 255 }, allow_blank: true
end
with_options if: :physical_hub_restricted? do |sa|
# HUB-25
- sa.validates_format_of :nearest_topic_name, :with => %r{\A[\w]{0,60}\z}
+ #sa.validates_length_of :nearest_topic_name, :maximum => 60, :allow_blank => true, :allow_nil => true
+ sa.validates :nearest_topic_name, length: { maximum: 60 }, allow_blank: true
# HUB-28
- sa.validates_presence_of :longitude
- sa.validates_presence_of :latitude
+ #sa.validates_presence_of :coordinates
+ sa.validates :coordinates, presence: true
# HUB-29
- sa.validates_format_of :city_name, :with => %r{\A[\w]{1,80}\z}
+ #sa.validates_length_of :city_name, :minimum => 1, :maximum => 80
+ sa.validates :city_name, length: { in: 1..80 }
# HUB-30
- sa.validates_format_of :zip_code, :with => %r{\A[\d]{5}\z}
+ #sa.validates_format_of :country_code, :with => %r{\A[\d]{5}\z}
+ sa.validates :country_code, presence: true, numericality: { only_integer: true }, length: { is: 5 }
# HUB-31
- sa.validates_format_of :comment, :with => %r{\A[\w]{0,255}\z}
- # HUB-32
- sa.validates_format_of :registration_number, :with => %r{\A[\w]{1,8}\z}, :allow_blank => true, :allow_nil => true
+ #sa.validates_length_of :comment, :maximum => 255, :allow_blank => true, :allow_nil => true
+ sa.validates :comment, length: { maximum: 255 }, allow_blank: true
+ #sa.validates :registration_number, :numericality => { :less_than => 10 ** 8 }
+ sa.validates :registration_number, presence: true, numericality: { less_than: 10 ** 8 }
end
end
def specific_objectid
- validate_specific_objectid( 12)
+ validate_specific_objectid(12)
end
end
end
diff --git a/lib/ninoxe_extension/hub/time_table_restrictions.rb b/lib/ninoxe_extension/hub/time_table_restrictions.rb
index 591810f42..b61d1e05a 100644
--- a/lib/ninoxe_extension/hub/time_table_restrictions.rb
+++ b/lib/ninoxe_extension/hub/time_table_restrictions.rb
@@ -6,11 +6,12 @@ module NinoxeExtension::Hub
included do
include ObjectidRestrictions
- with_options if: :hub_restricted? do |jp|
+ with_options if: :hub_restricted? do |tt|
# HUB-44
- jp.validate :specific_objectid
+ tt.validate :specific_objectid
# HUB-45
- jp.validates_format_of :comment, :with => %r{\A[\w]{0,75}\z}
+ #tt.validates_length_of :comment, :maximum => 75, :allow_blank => true, :allow_nil => true
+ tt.validates :comment, length: { maximum: 75 }, allow_blank: true
end
end
def specific_objectid
diff --git a/lib/ninoxe_extension/hub/vehicle_journey_restrictions.rb b/lib/ninoxe_extension/hub/vehicle_journey_restrictions.rb
index 151123a43..b1a493207 100644
--- a/lib/ninoxe_extension/hub/vehicle_journey_restrictions.rb
+++ b/lib/ninoxe_extension/hub/vehicle_journey_restrictions.rb
@@ -7,8 +7,8 @@ module NinoxeExtension::Hub
include ObjectidRestrictions
# HUB-42
- with_options if: :hub_restricted? do |jp|
- jp.validate :specific_objectid
+ with_options if: :hub_restricted? do |vj|
+ vj.validate :specific_objectid
end
end
def specific_objectid
diff --git a/lib/osrm_route_section_processor.rb b/lib/osrm_route_section_processor.rb
new file mode 100644
index 000000000..5f3bdef29
--- /dev/null
+++ b/lib/osrm_route_section_processor.rb
@@ -0,0 +1,40 @@
+require 'open-uri'
+
+class OsrmRouteSectionProcessor
+
+ def call(route_section)
+ points_string = (route_section.input_geometry || route_section.default_geometry).points.map do |point|
+ "loc=#{point.y.to_f},#{point.x.to_f}"
+ end.join
+
+ Rails.logger.info "Invoke router.project-osrm.org for RouteSection StopArea:#{route_section.departure.id} -> StopArea:#{route_section.arrival.id}"
+
+ response = open "http://router.project-osrm.org/viaroute?#{points_string}instructions=false"
+ return nil unless response
+
+ geometry = JSON.parse(response.read.to_s)['route_geometry']
+ if geometry
+ decoded_geometry = Polylines::Decoder.decode_polyline(geometry, 1e6).map do |point|
+ GeoRuby::SimpleFeatures::Point.from_x_y(point[1], point[0], 4326)
+ end
+
+ GeoRuby::SimpleFeatures::LineString.from_points(decoded_geometry).try(:to_rgeo) if decoded_geometry.many?
+ end
+ rescue OpenURI::HTTPError => e
+ Rails.logger.error "router.project-osrm.org failed: #{e}"
+ nil
+ rescue IOError => e
+ Rails.logger.error "router.project-osrm.org failed: #{e}"
+ nil
+ end
+
+ def self.create_all
+ Chouette::JourneyPattern.find_each do |journey_pattern|
+ selector = RouteSectionsSelector.new(journey_pattern)
+ selector.sections.each do |section|
+ section.create_candidate unless section.candidates.present?
+ end
+ end
+ end
+
+end
diff --git a/lib/tasks/demo.rake b/lib/tasks/demo.rake
index d78637c96..fbafa96c1 100644
--- a/lib/tasks/demo.rake
+++ b/lib/tasks/demo.rake
@@ -13,10 +13,27 @@ namespace :demo do
user.confirm!
referential = organisation.referentials.create( :name => "Tatrobus", :slug => "tatrobus", :prefix => "TAT")
- resource = Rack::Test::UploadedFile.new( Rails.application.config.demo_data, 'application/zip', false)
- import_instance = referential.import_tasks.create( :resources => resource, :referential_id => referential.id, :user_name => user.name, :no_save => false, :user_id => user.id)
- import_instance.import
+ #resource = Rack::Test::UploadedFile.new( Rails.application.config.demo_data, 'application/zip', false)
+ #import_instance = ImportTask.new( :resources => resource, :referential_id => referential.id, :user_name => user.name, :no_save => false, :user_id => user.id, :name => "initialize demo", :data_format => "neptune")
+ #import_instance.save
+
+ File.open("/tmp/parameters_demo.json", "w") { |file|
+ file.write('{
+"parameters" : {
+ "neptune-import": {
+ "user_name" : "Demo",
+ "name" : "Data restauration",
+ "organisation_name" : "DemoChouette",
+ "referential_name" : "Tatrobus",
+ "clean_repository" : true,
+ "no_save" : false
+ }
+ }
+}') }
+
+ cmd = 'curl -F "file=@'+Rails.application.config.demo_data+';filename=tatrobus.zip" -F "file=@/tmp/parameters_demo.json;filename=parameters.json" http://localhost:8180/chouette_iev/referentials/tatrobus/importer/neptune'
+ system(cmd)
+
puts "Restore demo environment complete"
end
end
-
diff --git a/lib/tasks/route_sections.rake b/lib/tasks/route_sections.rake
new file mode 100644
index 000000000..d48ddbba4
--- /dev/null
+++ b/lib/tasks/route_sections.rake
@@ -0,0 +1,17 @@
+namespace :route_sections do
+
+ def find_referential(id_or_slug)
+ if id_or_slug.to_s =~ /\A\d+\Z/
+ Referential.find id_or_slug.to_i
+ else
+ Referential.find_by slug: id_or_slug
+ end
+ end
+
+ desc "Generate all RouteSections for a given Referential"
+ task :create_all, [:referential] => [:environment] do |t, args|
+ find_referential(args[:referential]).switch
+ OsrmRouteSectionProcessor.create_all
+ end
+
+end
diff --git a/public/help/2015-07-23_152040.png b/public/help/2015-07-23_152040.png
new file mode 100644
index 000000000..5cf9bcfd8
--- /dev/null
+++ b/public/help/2015-07-23_152040.png
Binary files differ
diff --git a/public/help/2015-07-23_152615.png b/public/help/2015-07-23_152615.png
new file mode 100644
index 000000000..5bd4e3d25
--- /dev/null
+++ b/public/help/2015-07-23_152615.png
Binary files differ
diff --git a/public/help/2015-07-23_162747.png b/public/help/2015-07-23_162747.png
new file mode 100644
index 000000000..cf0653243
--- /dev/null
+++ b/public/help/2015-07-23_162747.png
Binary files differ
diff --git a/public/help/2015-07-23_162942.png b/public/help/2015-07-23_162942.png
new file mode 100644
index 000000000..6933dc80b
--- /dev/null
+++ b/public/help/2015-07-23_162942.png
Binary files differ
diff --git a/public/help/2015-07-23_165033.png b/public/help/2015-07-23_165033.png
new file mode 100644
index 000000000..c354235d1
--- /dev/null
+++ b/public/help/2015-07-23_165033.png
Binary files differ
diff --git a/public/help/2015-07-23_165157.png b/public/help/2015-07-23_165157.png
new file mode 100644
index 000000000..20187f077
--- /dev/null
+++ b/public/help/2015-07-23_165157.png
Binary files differ
diff --git a/public/help/2015-07-23_165644.png b/public/help/2015-07-23_165644.png
new file mode 100644
index 000000000..c62d01b7a
--- /dev/null
+++ b/public/help/2015-07-23_165644.png
Binary files differ
diff --git a/public/help/2015-09-16_152512.png b/public/help/2015-09-16_152512.png
new file mode 100644
index 000000000..373ac5974
--- /dev/null
+++ b/public/help/2015-09-16_152512.png
Binary files differ
diff --git a/public/help/2015-09-16_153205.png b/public/help/2015-09-16_153205.png
new file mode 100644
index 000000000..744414a6f
--- /dev/null
+++ b/public/help/2015-09-16_153205.png
Binary files differ
diff --git a/public/help/2015-09-16_153317.png b/public/help/2015-09-16_153317.png
new file mode 100644
index 000000000..32de361bf
--- /dev/null
+++ b/public/help/2015-09-16_153317.png
Binary files differ
diff --git a/public/help/2015-09-16_153752.png b/public/help/2015-09-16_153752.png
new file mode 100644
index 000000000..fc5eda5f6
--- /dev/null
+++ b/public/help/2015-09-16_153752.png
Binary files differ
diff --git a/public/help/2015-09-16_175925.png b/public/help/2015-09-16_175925.png
new file mode 100644
index 000000000..db021c40e
--- /dev/null
+++ b/public/help/2015-09-16_175925.png
Binary files differ
diff --git a/public/help/2015-09-16_180707.png b/public/help/2015-09-16_180707.png
new file mode 100644
index 000000000..70815aa3f
--- /dev/null
+++ b/public/help/2015-09-16_180707.png
Binary files differ
diff --git a/public/help/2015-09-16_181027.png b/public/help/2015-09-16_181027.png
new file mode 100644
index 000000000..e520b51fd
--- /dev/null
+++ b/public/help/2015-09-16_181027.png
Binary files differ
diff --git a/public/help/2015-12-17_172522.png b/public/help/2015-12-17_172522.png
new file mode 100644
index 000000000..9ad7799f1
--- /dev/null
+++ b/public/help/2015-12-17_172522.png
Binary files differ
diff --git a/public/help/2015-12-17_173615.png b/public/help/2015-12-17_173615.png
new file mode 100644
index 000000000..7af3f4645
--- /dev/null
+++ b/public/help/2015-12-17_173615.png
Binary files differ
diff --git a/public/help/2016-01-08_163438.png b/public/help/2016-01-08_163438.png
new file mode 100644
index 000000000..e4826ce58
--- /dev/null
+++ b/public/help/2016-01-08_163438.png
Binary files differ
diff --git a/public/help/2016-01-08_163715.png b/public/help/2016-01-08_163715.png
new file mode 100644
index 000000000..381cc35bb
--- /dev/null
+++ b/public/help/2016-01-08_163715.png
Binary files differ
diff --git a/public/help/2016-01-08_165558.png b/public/help/2016-01-08_165558.png
new file mode 100644
index 000000000..8da4dd177
--- /dev/null
+++ b/public/help/2016-01-08_165558.png
Binary files differ
diff --git a/public/help/2016-01-08_170524.png b/public/help/2016-01-08_170524.png
new file mode 100644
index 000000000..3ec79d05a
--- /dev/null
+++ b/public/help/2016-01-08_170524.png
Binary files differ
diff --git a/public/help/2016-01-08_175148.png b/public/help/2016-01-08_175148.png
new file mode 100644
index 000000000..b8578e307
--- /dev/null
+++ b/public/help/2016-01-08_175148.png
Binary files differ
diff --git a/public/help/2016-01-08_175340.png b/public/help/2016-01-08_175340.png
new file mode 100644
index 000000000..657c54375
--- /dev/null
+++ b/public/help/2016-01-08_175340.png
Binary files differ
diff --git a/public/help/2016-01-08_180432.png b/public/help/2016-01-08_180432.png
new file mode 100644
index 000000000..c0d5f30a5
--- /dev/null
+++ b/public/help/2016-01-08_180432.png
Binary files differ
diff --git a/public/help/2016-01-08_180930.png b/public/help/2016-01-08_180930.png
new file mode 100644
index 000000000..02be53644
--- /dev/null
+++ b/public/help/2016-01-08_180930.png
Binary files differ
diff --git a/public/help/import_file_result.png b/public/help/import_file_result.png
index a98cef26d..a673f1a5e 100644
--- a/public/help/import_file_result.png
+++ b/public/help/import_file_result.png
Binary files differ
diff --git a/public/help/import_line_detail.png b/public/help/import_line_detail.png
index 6adad13c8..f14294d9f 100644
--- a/public/help/import_line_detail.png
+++ b/public/help/import_line_detail.png
Binary files differ
diff --git a/public/help/import_line_result.png b/public/help/import_line_result.png
index 5b178f0b2..d6e3b9a49 100644
--- a/public/help/import_line_result.png
+++ b/public/help/import_line_result.png
Binary files differ
diff --git a/public/help/import_result.png b/public/help/import_result.png
index 1a399c95d..4703f2327 100644
--- a/public/help/import_result.png
+++ b/public/help/import_result.png
Binary files differ
diff --git a/spec/controllers/routes_controller_spec.rb b/spec/controllers/routes_controller_spec.rb
index a813056c3..de6d16c8b 100644
--- a/spec/controllers/routes_controller_spec.rb
+++ b/spec/controllers/routes_controller_spec.rb
@@ -37,7 +37,7 @@ describe RoutesController, :type => :controller do
it_behaves_like "line and referential linked"
it_behaves_like "redirected to referential_line_path(referential,line)"
end
-
+
describe "POST /create" do
before(:each) do
post :create, :line_id => route.line_id,
@@ -48,7 +48,7 @@ describe RoutesController, :type => :controller do
it_behaves_like "line and referential linked"
it_behaves_like "redirected to referential_line_path(referential,line)"
end
-
+
describe "PUT /update" do
before(:each) do
put :update, :id => route.id, :line_id => route.line_id,
@@ -59,10 +59,10 @@ describe RoutesController, :type => :controller do
it_behaves_like "route, line and referential linked"
it_behaves_like "redirected to referential_line_path(referential,line)"
end
-
+
describe "GET /show" do
before(:each) do
- get :show, :id => route.id,
+ get :show, :id => route.id,
:line_id => route.line_id,
:referential_id => referential.id
end
@@ -78,6 +78,6 @@ describe RoutesController, :type => :controller do
# expect(assigns[:stop_points]).to eq(route.stop_points.paginate(:page => nil))
#end
end
-
+
end
diff --git a/spec/controllers/vehicle_journey_frequencies_controller_spec.rb b/spec/controllers/vehicle_journey_frequencies_controller_spec.rb
new file mode 100644
index 000000000..61636e334
--- /dev/null
+++ b/spec/controllers/vehicle_journey_frequencies_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+RSpec.describe VehicleJourneyFrequenciesController, :type => :controller do
+
+end
diff --git a/spec/features/timebands_spec.rb b/spec/features/timebands_spec.rb
new file mode 100644
index 000000000..bd1d4b820
--- /dev/null
+++ b/spec/features/timebands_spec.rb
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+require 'spec_helper'
+
+describe "Timebands", :type => :feature do
+ login_user
+
+ let!(:timebands) { Array.new(2) { create(:timeband) } }
+ subject { timebands.first }
+
+ describe "list" do
+ it "display timebands" do
+ visit referential_timebands_path(referential)
+ expect(page).to have_content(timebands.first.name)
+ expect(page).to have_content(timebands.last.name)
+ end
+
+ end
+
+ describe "show" do
+ it "display timeband" do
+ visit referential_timebands_path(referential)
+ click_link "#{timebands.first.name}"
+ expect(page).to have_content(timebands.first.name)
+ end
+
+ end
+
+ describe "new" do
+ it "creates timeband and return to show" do
+ visit referential_timebands_path(referential)
+ click_link "Ajouter un créneau horaire"
+ fill_in "Titre", :with => "Timeband 1"
+
+ select '10', from: 'timeband_start_time_4i'
+ select '00', from: 'timeband_start_time_5i'
+ select '11', from: 'timeband_end_time_4i'
+ select '00', from: 'timeband_end_time_5i'
+
+ click_button("Créer créneau horaire")
+ expect(page).to have_content("Timeband 1")
+ end
+ end
+
+ describe "edit and return to show" do
+ it "edit timeband" do
+ visit referential_timeband_path(referential, subject)
+ click_link "Modifier ce créneau horaire"
+ fill_in "Titre", :with => "Timeband Modified"
+ click_button("Modifier créneau horaire")
+ expect(page).to have_content("Timeband Modified")
+ end
+ end
+
+ describe "delete and return to list" do
+ it "delete timeband" do
+ visit referential_timebands_path(referential)
+ page.all('.remove')[0].click
+ expect(page).to_not have_content("Timeband Modified")
+ end
+ end
+
+end
diff --git a/spec/helpers/vehicle_journey_frequencies_helper_spec.rb b/spec/helpers/vehicle_journey_frequencies_helper_spec.rb
new file mode 100644
index 000000000..97a1df052
--- /dev/null
+++ b/spec/helpers/vehicle_journey_frequencies_helper_spec.rb
@@ -0,0 +1,15 @@
+require 'spec_helper'
+
+# Specs in this file have access to a helper object that includes
+# the VehicleJourneyFrequenciesHelper. For example:
+#
+# describe VehicleJourneyFrequenciesHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# expect(helper.concat_strings("this","that")).to eq("this that")
+# end
+# end
+# end
+RSpec.describe VehicleJourneyFrequenciesHelper, :type => :helper do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/export_task_spec.rb b/spec/models/export_task_spec.rb
new file mode 100644
index 000000000..1a52a6175
--- /dev/null
+++ b/spec/models/export_task_spec.rb
@@ -0,0 +1,8 @@
+require 'spec_helper'
+
+describe ExportTask, :type => :model do
+
+ it { should_not validate_presence_of(:start_date) }
+ it { should_not validate_presence_of(:end_date) }
+
+end
diff --git a/spec/models/gtfs_export_spec.rb b/spec/models/gtfs_export_spec.rb
index a5e5d0335..ccc98e872 100644
--- a/spec/models/gtfs_export_spec.rb
+++ b/spec/models/gtfs_export_spec.rb
@@ -1,10 +1,33 @@
-# require 'spec_helper'
+require 'spec_helper'
-# describe GtfsExport, :type => :model do
+describe GtfsExport, :type => :model do
-# describe '#export_options' do
-# subject { super().export_options }
-# it { is_expected.to include(:format => :gtfs) }
-# end
-
-# end
+ describe "#time_zone" do
+
+ context "when exported data are not StopAreas" do
+
+ before do
+ subject.references_type = "network"
+ end
+
+ it "should be mandatory" do
+ should validate_presence_of(:time_zone)
+ end
+
+ end
+
+ context "when export data are StopArea" do
+
+ before do
+ subject.references_type = "stop_area"
+ end
+
+ it "should be mandatory" do
+ should_not validate_presence_of(:time_zone)
+ end
+
+ end
+
+ end
+
+end
diff --git a/spec/models/route_sections_selector_spec.rb b/spec/models/route_sections_selector_spec.rb
new file mode 100644
index 000000000..19863c315
--- /dev/null
+++ b/spec/models/route_sections_selector_spec.rb
@@ -0,0 +1,43 @@
+# require 'spec_helper'
+#
+# describe RouteSectionsSelector, :type => :model do
+#
+# let(:stop_points) { create_list :stop_point, 5 }
+# let(:itinerary) { double stop_points: stop_points, route_sections: [] }
+#
+# subject { RouteSectionsSelector.new itinerary }
+#
+# describe "#sections" do
+#
+# it "should create a Section between each StopPoint" do
+# expect(subject.sections.size).to eq(stop_points.size - 1)
+# end
+#
+# end
+#
+# end
+#
+# describe RouteSectionsSelector::Section, :type => :model do
+#
+# let(:departure) { create :stop_point }
+# let(:arrival) { create :stop_point }
+#
+# subject { RouteSectionsSelector::Section.new departure, arrival }
+#
+# let(:route_sections) do
+# create_list :route_section, 5,
+# departure: departure.stop_area,
+# arrival: arrival.stop_area
+# end
+#
+# describe "#candidates" do
+# it "should return an empty array when no RouteSection exists" do
+# expect(subject.candidates).to be_empty
+# end
+#
+# it "should return the RouteSections with the same departure/arrival StopAreas" do
+# expect(subject.candidates).to match_array(route_sections)
+# end
+# end
+#
+# end
diff --git a/spec/support/fake_iev_server.rb b/spec/support/fake_iev_server.rb
index c311fdc91..8cd002fae 100644
--- a/spec/support/fake_iev_server.rb
+++ b/spec/support/fake_iev_server.rb
@@ -10,17 +10,11 @@ end
# Importer
############
# get list
-fixture_request :get,
- "http://#{Rails.application.secrets.api_endpoint}referentials/test/scheduled_jobs?action=importer",
- 'scheduled_jobs.json'
+fixture_request :get, "#{Rails.application.secrets.api_endpoint}referentials/test/scheduled_jobs?action=importer", 'scheduled_jobs.json'
# get element
-fixture_request :get,
- "http://#{Rails.application.secrets.api_endpoint}referentials/test/scheduled_jobs/1?action=importer",
- 'scheduled_job.json'
+fixture_request :get, "#{Rails.application.secrets.api_endpoint}referentials/test/scheduled_jobs/1?action=importer", 'scheduled_job.json'
# post element
-fixture_request :post,
- "http://#{Rails.application.secrets.api_endpoint}referentials/test/scheduled_jobs/",
- 'scheduled_job.json'
+fixture_request :post, "#{Rails.application.secrets.api_endpoint}referentials/test/scheduled_jobs/", 'scheduled_job.json'
# Optionnels
# delete element
@@ -36,6 +30,3 @@ fixture_request :post,
############
# Validation
############
-
-
-
diff --git a/spec/support/referential.rb b/spec/support/referential.rb
index d77a05f41..8c468eb53 100644
--- a/spec/support/referential.rb
+++ b/spec/support/referential.rb
@@ -12,7 +12,7 @@ module ReferentialHelper
end
module ClassMethods
-
+
def assign_referential
before(:each) do
assign :referential, referential
@@ -34,7 +34,7 @@ RSpec.configure do |config|
config.before(:suite) do
# Clean all tables to start
- DatabaseCleaner.clean_with :truncation
+ DatabaseCleaner.clean_with :truncation, except: %w[spatial_ref_sys]
# Truncating doesn't drop schemas, ensure we're clean here, first *may not* exist
Apartment::Tenant.drop('first') rescue nil
# Create the default tenant for our tests
@@ -49,7 +49,7 @@ RSpec.configure do |config|
end
config.before(:each, :js => true) do
- DatabaseCleaner.strategy = :truncation
+ DatabaseCleaner.strategy = :truncation, { except: %w[spatial_ref_sys] }
end
config.before(:each) do
@@ -61,6 +61,6 @@ RSpec.configure do |config|
Apartment::Tenant.reset
# Rollback transaction
DatabaseCleaner.clean
- end
+ end
end
diff --git a/spec/views/timebands/edit.html.erb_spec.rb b/spec/views/timebands/edit.html.erb_spec.rb
new file mode 100644
index 000000000..5f6051884
--- /dev/null
+++ b/spec/views/timebands/edit.html.erb_spec.rb
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+describe "/timebands/edit", :type => :view do
+ assign_referential
+ let!(:timeband) { assign(:timeband, create(:timeband) ) }
+
+ describe "test" do
+ it "should render h2 with the group name" do
+ render
+ expect(rendered).to have_selector("h2", text: Regexp.new(timeband.name))
+ end
+ end
+
+ describe "form" do
+ it "should render input for timeband" do
+ render
+ expect(rendered).to have_field('timeband[name]')
+ expect(rendered).to have_field('timeband[start_time(4i)]')
+ expect(rendered).to have_field('timeband[start_time(5i)]')
+ expect(rendered).to have_selector('button[type=submit]')
+ end
+
+ end
+end
diff --git a/spec/views/timebands/index.html.erb_spec.rb b/spec/views/timebands/index.html.erb_spec.rb
new file mode 100644
index 000000000..0ce0c419c
--- /dev/null
+++ b/spec/views/timebands/index.html.erb_spec.rb
@@ -0,0 +1,20 @@
+require 'spec_helper'
+
+describe "/timebands/index", :type => :view do
+
+ assign_referential
+ let!(:timebands) { assign :timebands, Array.new(2){ create(:timeband) }.paginate }
+
+ it "should render a show link for each timeband" do
+ render
+ timebands.each do |timeband|
+ expect(rendered).to have_selector("a[href='#{view.referential_timeband_path(referential, timeband)}']", :text => timeband.name)
+ end
+ end
+
+ it "should render a link to create a new timeband" do
+ render
+ expect(view.content_for(:sidebar)).to have_selector(".actions a[href='#{new_referential_timeband_path(referential)}']")
+ end
+
+end
diff --git a/spec/views/timebands/new.html.erb_spec.rb b/spec/views/timebands/new.html.erb_spec.rb
new file mode 100644
index 000000000..f5e85f20c
--- /dev/null
+++ b/spec/views/timebands/new.html.erb_spec.rb
@@ -0,0 +1,18 @@
+require 'spec_helper'
+
+describe "/timebands/new", :type => :view do
+ assign_referential
+ let!(:timeband) { assign(:timeband, build(:timeband)) }
+
+ describe "form" do
+
+ it "should render inputs" do
+ render
+ expect(rendered).to have_field('timeband[name]')
+ expect(rendered).to have_field('timeband[start_time(4i)]')
+ expect(rendered).to have_field('timeband[start_time(5i)]')
+ expect(rendered).to have_selector('button[type=submit]')
+ end
+
+ end
+end
diff --git a/spec/views/timebands/show.html.erb_spec.rb b/spec/views/timebands/show.html.erb_spec.rb
new file mode 100644
index 000000000..d43ba588c
--- /dev/null
+++ b/spec/views/timebands/show.html.erb_spec.rb
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+describe "/timebands/show", :type => :view do
+
+ assign_referential
+ let!(:timeband) { assign(:timeband, create(:timeband)) }
+
+ it "should render h2 with the timeband name" do
+ render
+ expect(rendered).to have_selector("h2", text: Regexp.new(timeband.name))
+ end
+
+ it "should render a link to edit the timeband" do
+ render
+ expect(view.content_for(:sidebar)).to have_selector(".actions a[href='#{view.edit_referential_timeband_path(referential, timeband)}']")
+ end
+
+ it "should render a link to remove the timeband" do
+ render
+ expect(view.content_for(:sidebar)).to have_selector(".actions a[href='#{view.referential_timeband_path(referential, timeband)}'][class='remove']")
+ end
+
+end
+
diff --git a/spec/views/vehicle_journeys/_form.html.erb_spec.rb b/spec/views/vehicle_journeys/_form.html.erb_spec.rb
index ab1d946bf..05fa068d9 100644
--- a/spec/views/vehicle_journeys/_form.html.erb_spec.rb
+++ b/spec/views/vehicle_journeys/_form.html.erb_spec.rb
@@ -8,7 +8,11 @@ describe "/vehicle_journeys/_form", :type => :view do
let!(:vehicle_journey) { assign :vehicle_journey, create(:vehicle_journey, :route => route) }
it "should render an input for transport_mode" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector( "select#vehicle_journey_transport_mode_name") do |node|
Chouette::Line.transport_modes.each do |mode|
expect(node).to have_selector("option", :text => mode.text_code)
@@ -17,14 +21,22 @@ describe "/vehicle_journeys/_form", :type => :view do
end
it "should render an input for comment" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do
with_selector "input[type=text][comment=]", vehicle_journey.comment
end
end
context "stop's time view part" do
it "should render stop's names" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do |form_node|
vehicle_journey.stop_points.each do |sp|
form_node.with_selector "label", :text => sp.stop_area.name
@@ -32,12 +44,20 @@ describe "/vehicle_journeys/_form", :type => :view do
end
end
it "renders _vehicle_journey_at_stop_fields partial for each vehicle_journey_at_stop" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(view).to render_template(:partial => "_vehicle_journey_at_stop_fields", :count => vehicle_journey.vehicle_journey_at_stops.count)
end
it "should render vehicle_journey_at_stop's departure time" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do |form_node|
vehicle_journey.stop_points.each_with_index do |sp, index|
form_node.with_selector "select", :name => "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(4i)]"
@@ -48,7 +68,11 @@ describe "/vehicle_journeys/_form", :type => :view do
end
context "when existing vehicle_journey" do
it "should display objectid not as an input" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do
with_selector "input[type=text][objectid=][disabled=true]", vehicle_journey.objectid
end
@@ -57,7 +81,11 @@ describe "/vehicle_journeys/_form", :type => :view do
context "when new vehicle_journey" do
let!(:vehicle_journey) { assign :vehicle_journey, build(:vehicle_journey, :route => route) }
it "should render an input for objectid" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do
with_selector "input[type=text][objectid=][disabled=false]", vehicle_journey.objectid
end
diff --git a/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb b/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb
new file mode 100644
index 000000000..e1c61c4a7
--- /dev/null
+++ b/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb
@@ -0,0 +1,6 @@
+require 'spec_helper'
+
+describe "/vehicle_journeys/_vehicle_journey", :type => :view do
+
+ assign_referential
+end
diff --git a/vendor/assets/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.png b/vendor/assets/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 5b5dab2ab..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.png b/vendor/assets/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.png
deleted file mode 100644
index ad3d6346e..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-bg_glass_65_ffffff_1x400.png b/vendor/assets/stylesheets/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index 42ccba269..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_glass_65_ffffff_1x400.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-bg_glass_75_dadada_1x400.png b/vendor/assets/stylesheets/images/ui-bg_glass_75_dadada_1x400.png
deleted file mode 100644
index 5a46b47cb..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_glass_75_dadada_1x400.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.png b/vendor/assets/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.png
deleted file mode 100644
index 86c2baa65..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-bg_glass_75_ffffff_1x400.png b/vendor/assets/stylesheets/images/ui-bg_glass_75_ffffff_1x400.png
deleted file mode 100644
index e65ca1297..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_glass_75_ffffff_1x400.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/vendor/assets/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.png
deleted file mode 100644
index 7c9fa6c6e..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-bg_inset-soft_95_fef1ec_1x100.png b/vendor/assets/stylesheets/images/ui-bg_inset-soft_95_fef1ec_1x100.png
deleted file mode 100644
index 0e05810ff..000000000
--- a/vendor/assets/stylesheets/images/ui-bg_inset-soft_95_fef1ec_1x100.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-icons_222222_256x240.png b/vendor/assets/stylesheets/images/ui-icons_222222_256x240.png
deleted file mode 100644
index b273ff111..000000000
--- a/vendor/assets/stylesheets/images/ui-icons_222222_256x240.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-icons_2e83ff_256x240.png b/vendor/assets/stylesheets/images/ui-icons_2e83ff_256x240.png
deleted file mode 100644
index 09d1cdc85..000000000
--- a/vendor/assets/stylesheets/images/ui-icons_2e83ff_256x240.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-icons_454545_256x240.png b/vendor/assets/stylesheets/images/ui-icons_454545_256x240.png
deleted file mode 100644
index 59bd45b90..000000000
--- a/vendor/assets/stylesheets/images/ui-icons_454545_256x240.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-icons_888888_256x240.png b/vendor/assets/stylesheets/images/ui-icons_888888_256x240.png
deleted file mode 100644
index 6d02426c1..000000000
--- a/vendor/assets/stylesheets/images/ui-icons_888888_256x240.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/images/ui-icons_cd0a0a_256x240.png b/vendor/assets/stylesheets/images/ui-icons_cd0a0a_256x240.png
deleted file mode 100644
index 2ab019b73..000000000
--- a/vendor/assets/stylesheets/images/ui-icons_cd0a0a_256x240.png
+++ /dev/null
Binary files differ
diff --git a/vendor/assets/stylesheets/jquery-ui.css b/vendor/assets/stylesheets/jquery-ui.css
deleted file mode 100644
index 9a5a29c86..000000000
--- a/vendor/assets/stylesheets/jquery-ui.css
+++ /dev/null
@@ -1,565 +0,0 @@
-/*!
- * jQuery UI CSS Framework 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden { display: none; }
-.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
-.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
-.ui-helper-clearfix:after { clear: both; }
-.ui-helper-clearfix { zoom: 1; }
-.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled { cursor: default !important; }
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-
-
-/*!
- * jQuery UI CSS Framework 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_75_ffffff_1x400.png) 50% 50% repeat-x; color: #222222; }
-.ui-widget-content a { color: #222222; }
-.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-header a { color: #222222; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x; color: #cd0a0a; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
- * jQuery UI Resizable 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizable#theming
- */
-.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
-.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
-.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
-.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
-.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
-.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
-.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
-.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
- * jQuery UI Selectable 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectable#theming
- */
-.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*!
- * jQuery UI Accordion 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion#theming
- */
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion { width: 100%; }
-.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
-.ui-accordion .ui-accordion-li-fix { display: inline; }
-.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
-.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
-.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
-.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
-.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
-.ui-accordion .ui-accordion-content-active { display: block; }
-/*!
- * jQuery UI Autocomplete 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete#theming
- */
-.ui-autocomplete { position: absolute; cursor: default; }
-
-/* workarounds */
-* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
-
-/*
- * jQuery UI Menu @VERSION
- *
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-.ui-menu {
- list-style:none;
- padding: 2px;
- margin: 0;
- display:block;
- float: left;
-}
-.ui-menu .ui-menu {
- margin-top: -3px;
-}
-.ui-menu .ui-menu-item {
- margin:0;
- padding: 0;
- zoom: 1;
- float: left;
- clear: left;
- width: 100%;
-}
-.ui-menu .ui-menu-item a {
- text-decoration:none;
- display:block;
- padding:.2em .4em;
- line-height:1.5;
- zoom:1;
-}
-.ui-menu .ui-menu-item a.ui-state-hover,
-.ui-menu .ui-menu-item a.ui-state-active {
- font-weight: normal;
- margin: -1px;
-}
-/*!
- * jQuery UI Button 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
-.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
-button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
-.ui-button-icons-only { width: 3.4em; }
-button.ui-button-icons-only { width: 3.7em; }
-
-/*button text element */
-.ui-button .ui-button-text { display: block; line-height: 1.4; }
-.ui-button-text-only .ui-button-text { padding: .4em 1em; }
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
-.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
-/* no icon support for input elements, provide padding by default */
-input.ui-button { padding: .4em 1em; }
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
-.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
-
-/*button sets*/
-.ui-buttonset { margin-right: 7px; }
-.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
-
-/* workarounds */
-button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*!
- * jQuery UI Dialog 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
-.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
-.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
-.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
-.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
-.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
-.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
-.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
-.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
-.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
-.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*!
- * jQuery UI Slider 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-.ui-slider { position: relative; text-align: left; }
-.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
-.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
-
-.ui-slider-horizontal { height: .8em; }
-.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
-.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
-.ui-slider-horizontal .ui-slider-range-min { left: 0; }
-.ui-slider-horizontal .ui-slider-range-max { right: 0; }
-
-.ui-slider-vertical { width: .8em; height: 100px; }
-.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
-.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
-.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!
- * jQuery UI Tabs 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs#theming
- */
-.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
-.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
-.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
-.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
-.ui-tabs .ui-tabs-hide { display: none !important; }
-/*!
- * jQuery UI Datepicker 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker#theming
- */
-.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
-.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
-.ui-datepicker .ui-datepicker-prev { left:2px; }
-.ui-datepicker .ui-datepicker-next { right:2px; }
-.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
-.ui-datepicker .ui-datepicker-next-hover { right:1px; }
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
-.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
-.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
-.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year { width: 49%;}
-.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
-.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
-.ui-datepicker td { border: 0; padding: 1px; }
-.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
-.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
-.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
-
-/* with multiple calendars */
-.ui-datepicker.ui-datepicker-multi { width:auto; }
-.ui-datepicker-multi .ui-datepicker-group { float:left; }
-.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
-.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
-.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
-.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
-.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
-.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
-
-/* RTL support */
-.ui-datepicker-rtl { direction: rtl; }
-.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
-.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group { float:right; }
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
- display: none; /*sorry for IE5*/
- display/**/: block; /*sorry for IE5*/
- position: absolute; /*must have*/
- z-index: -1; /*must have*/
- filter: mask(); /*must have*/
- top: -4px; /*must have*/
- left: -4px; /*must have*/
- width: 200px; /*must have*/
- height: 200px; /*must have*/
-}/*!
- * jQuery UI Progressbar 1.8.19
- *
- * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
-.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file