diff options
87 files changed, 759 insertions, 1298 deletions
diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb index fc85e35dd..8e8c48986 100644 --- a/app/controllers/api/v1/netex_imports_controller.rb +++ b/app/controllers/api/v1/netex_imports_controller.rb @@ -30,11 +30,7 @@ module Api def create_netex_import attributes = netex_import_params.merge creator: "Webservice" - if @new_referential.persisted? - attributes = attributes.merge referential_id: @new_referential.id - else - attributes = attributes.merge status: "failed" - end + attributes = attributes.merge referential_id: @new_referential.id @netex_import = NetexImport.new attributes @netex_import.save! diff --git a/app/controllers/compliance_check_sets_controller.rb b/app/controllers/compliance_check_sets_controller.rb index 95dcfbf05..175c22191 100644 --- a/app/controllers/compliance_check_sets_controller.rb +++ b/app/controllers/compliance_check_sets_controller.rb @@ -18,4 +18,35 @@ class ComplianceCheckSetsController < InheritedResources::Base } end end + + def executed + show! do |format| + # But now nobody is aware anymore that `format.html` passes a parameter into the block + format.html { executed_for_html } + end + end + + + private + + # Action Implementation + # --------------------- + + def executed_for_html + @q_checks_form = @compliance_check_set.compliance_checks.ransack(params[:q]) + @compliance_check_set = @compliance_check_set.decorate + compliance_checks = + decorate_compliance_checks( @q_checks_form.result) + .group_by(&:compliance_check_block) + @direct_compliance_checks = compliance_checks.delete nil + @blocks_to_compliance_checks_map = compliance_checks + end + + # Decoration + # ---------- + def decorate_compliance_checks(compliance_checks) + ModelDecorator.decorate( + compliance_checks, + with: ComplianceCheckDecorator) + end end diff --git a/app/controllers/compliance_checks_controller.rb b/app/controllers/compliance_checks_controller.rb index 07438cf99..81749e292 100644 --- a/app/controllers/compliance_checks_controller.rb +++ b/app/controllers/compliance_checks_controller.rb @@ -1,4 +1,4 @@ -class ComplianceChecksController < ChouetteController +class ComplianceChecksController < InheritedResources::Base end diff --git a/app/controllers/compliance_control_sets_controller.rb b/app/controllers/compliance_control_sets_controller.rb index 5c78d09e3..83a345c6f 100644 --- a/app/controllers/compliance_control_sets_controller.rb +++ b/app/controllers/compliance_control_sets_controller.rb @@ -17,17 +17,12 @@ class ComplianceControlSetsController < InheritedResources::Base def show show! do |format| - format.html { - @q_controls_form = @compliance_control_set.compliance_controls.ransack(params[:q]) - @compliance_control_set = @compliance_control_set.decorate - @compliance_controls = - decorate_compliance_controls( @q_controls_form.result) - .group_by(&:compliance_control_block) - @indirect_compliance_controls = @compliance_controls.delete nil - } + # But now nobody is aware anymore that `format.html` passes a parameter into the block + format.html { show_for_html } end end + def clone ComplianceControlSetCloner.new.copy(params[:id], current_organisation.id) flash[:notice] = I18n.t("compliance_control_sets.errors.operation_in_progress") @@ -59,4 +54,14 @@ class ComplianceControlSetsController < InheritedResources::Base def compliance_control_set_params params.require(:compliance_control_set).permit(:name, :id) end + + def show_for_html + @q_controls_form = @compliance_control_set.compliance_controls.ransack(params[:q]) + @compliance_control_set = @compliance_control_set.decorate + compliance_controls = + decorate_compliance_controls( @q_controls_form.result) + .group_by(&:compliance_control_block) + @direct_compliance_controls = compliance_controls.delete nil + @blocks_to_compliance_controls_map = compliance_controls + end end diff --git a/app/controllers/rule_parameter_sets_controller.rb b/app/controllers/rule_parameter_sets_controller.rb deleted file mode 100644 index de4863a08..000000000 --- a/app/controllers/rule_parameter_sets_controller.rb +++ /dev/null @@ -1,53 +0,0 @@ -class RuleParameterSetsController < InheritedResources::Base - defaults :resource_class => RuleParameterSet - respond_to :html - respond_to :js, :only => [ :mode ] - - def new - @rule_parameter_set = RuleParameterSet.default( current_organisation) - new! - end - - def destroy - if current_organisation.rule_parameter_sets.count == 1 - flash[:alert] = t('rule_parameter_sets.destroy.last_rps_protected') - redirect_to organisation_rule_parameter_sets_path - else - destroy! do |success, failure| - success.html { redirect_to organisation_rule_parameter_sets_path } - end - end - end - - def update - update!(rule_parameter_set_params) do |success, failure| - success.html { redirect_to organisation_rule_parameter_sets_path } - end - end - - def create - create!(rule_parameter_set_params) do |success, failure| - success.html { redirect_to organisation_rule_parameter_sets_path } - end - end - - protected - - alias_method :rule_parameter_set, :resource - - def collection - @rule_parameter_sets = current_organisation.rule_parameter_sets - end - - def create_resource(rule_parameter_sets) - rule_parameter_sets.organisation = current_organisation - super - end - - private - - def rule_parameter_set_params - params.require(:rule_parameter_set).permit(:organisation, :name, :inter_stop_area_distance_min, :parent_stop_area_distance_max, :stop_areas_area, :inter_access_point_distance_min, :inter_connection_link_distance_max, :walk_default_speed_max, :walk_occasional_traveller_speed_max, :walk_frequent_traveller_speed_max, :walk_mobility_restricted_traveller_speed_max, :inter_access_link_distance_max, :inter_stop_duration_max, :facility_stop_area_distance_max, :check_lines_in_groups, :check_line_routes, :check_stop_parent, :check_connection_link_on_physical, :check_allowed_transport_modes, :allowed_transport_mode_coach, :inter_stop_area_distance_min_mode_coach, :inter_stop_area_distance_max_mode_coach, :speed_max_mode_coach, :speed_min_mode_coach, :inter_stop_duration_variation_max_mode_coach, :allowed_transport_mode_air, :inter_stop_area_distance_min_mode_air, :inter_stop_area_distance_max_mode_air, :speed_max_mode_air, :speed_min_mode_air, :inter_stop_duration_variation_max_mode_air, :allowed_transport_mode_waterborne, :inter_stop_area_distance_min_mode_waterborne, :inter_stop_area_distance_max_mode_waterborne, :speed_max_mode_waterborne, :speed_min_mode_waterborne, :inter_stop_duration_variation_max_mode_waterborne, :allowed_transport_mode_bus, :inter_stop_area_distance_min_mode_bus, :inter_stop_area_distance_max_mode_bus, :speed_max_mode_bus, :speed_min_mode_bus, :inter_stop_duration_variation_max_mode_bus, :allowed_transport_mode_ferry, :inter_stop_area_distance_min_mode_ferry, :inter_stop_area_distance_max_mode_ferry, :speed_max_mode_ferry, :speed_min_mode_ferry, :inter_stop_duration_variation_max_mode_ferry, :allowed_transport_mode_walk, :inter_stop_area_distance_min_mode_walk, :inter_stop_area_distance_max_mode_walk, :speed_max_mode_walk, :speed_min_mode_walk, :inter_stop_duration_variation_max_mode_walk, :allowed_transport_mode_metro, :inter_stop_area_distance_min_mode_metro, :inter_stop_area_distance_max_mode_metro, :speed_max_mode_metro, :speed_min_mode_metro, :inter_stop_duration_variation_max_mode_metro, :allowed_transport_mode_shuttle, :inter_stop_area_distance_min_mode_shuttle, :inter_stop_area_distance_max_mode_shuttle, :speed_max_mode_shuttle, :speed_min_mode_shuttle, :inter_stop_duration_variation_max_mode_shuttle, :allowed_transport_mode_rapid_transit, :inter_stop_area_distance_min_mode_rapid_transit, :inter_stop_area_distance_max_mode_rapid_transit, :speed_max_mode_rapid_transit, :speed_min_mode_rapid_transit, :inter_stop_duration_variation_max_mode_rapid_transit, :allowed_transport_mode_taxi, :inter_stop_area_distance_min_mode_taxi, :inter_stop_area_distance_max_mode_taxi, :speed_max_mode_taxi, :speed_min_mode_taxi, :inter_stop_duration_variation_max_mode_taxi, :allowed_transport_mode_local_train, :inter_stop_area_distance_min_mode_local_train, :inter_stop_area_distance_max_mode_local_train, :speed_max_mode_local_train, :speed_min_mode_local_train, :inter_stop_duration_variation_max_mode_local_train, :allowed_transport_mode_train, :inter_stop_area_distance_min_mode_train, :inter_stop_area_distance_max_mode_train, :speed_max_mode_train, :speed_min_mode_train, :inter_stop_duration_variation_max_mode_train, :allowed_transport_mode_long_distance_train, :inter_stop_area_distance_min_mode_long_distance_train, :inter_stop_area_distance_max_mode_long_distance_train, :speed_max_mode_long_distance_train, :speed_min_mode_long_distance_train, :inter_stop_duration_variation_max_mode_long_distance_train, :allowed_transport_mode_tramway, :inter_stop_area_distance_min_mode_tramway, :inter_stop_area_distance_max_mode_tramway, :speed_max_mode_tramway, :speed_min_mode_tramway, :inter_stop_duration_variation_max_mode_tramway, :allowed_transport_mode_trolleybus, :inter_stop_area_distance_min_mode_trolleybus, :inter_stop_area_distance_max_mode_trolleybus, :speed_max_mode_trolleybus, :speed_min_mode_trolleybus, :inter_stop_duration_variation_max_mode_trolleybus, :allowed_transport_mode_private_vehicle, :inter_stop_area_distance_min_mode_private_vehicle, :inter_stop_area_distance_max_mode_private_vehicle, :speed_max_mode_private_vehicle, :speed_min_mode_private_vehicle, :inter_stop_duration_variation_max_mode_private_vehicle, :allowed_transport_mode_bicycle, :inter_stop_area_distance_min_mode_bicycle, :inter_stop_area_distance_max_mode_bicycle, :speed_max_mode_bicycle, :speed_min_mode_bicycle, :inter_stop_duration_variation_max_mode_bicycle, :allowed_transport_mode_other, :inter_stop_area_distance_min_mode_other, :inter_stop_area_distance_max_mode_other, :speed_max_mode_other, :speed_min_mode_other, :inter_stop_duration_variation_max_mode_other, :check_network, :unique_column_objectid_object_network, :pattern_column_objectid_object_network, :min_size_column_objectid_object_network, :max_size_column_objectid_object_network, :unique_column_name_object_network, :pattern_column_name_object_network, :min_size_column_name_object_network, :max_size_column_name_object_network, :unique_column_registration_number_object_network, :pattern_column_registration_number_object_network, :min_size_column_registration_number_object_network, :max_size_column_registration_number_object_network, :check_company, :unique_column_objectid_object_company, :pattern_column_objectid_object_company, :min_size_column_objectid_object_company, :max_size_column_objectid_object_company, :unique_column_name_object_company, :pattern_column_name_object_company, :min_size_column_name_object_company, :max_size_column_name_object_company, :unique_column_registration_number_object_company, :pattern_column_registration_number_object_company, :min_size_column_registration_number_object_company, :max_size_column_registration_number_object_company, :check_group_of_line, :unique_column_objectid_object_group_of_line, :pattern_column_objectid_object_group_of_line, :min_size_column_objectid_object_group_of_line, :max_size_column_objectid_object_group_of_line, :unique_column_name_object_group_of_line, :pattern_column_name_object_group_of_line, :min_size_column_name_object_group_of_line, :max_size_column_name_object_group_of_line, :unique_column_registration_number_object_group_of_line, :pattern_column_registration_number_object_group_of_line, :min_size_column_registration_number_object_group_of_line, :max_size_column_registration_number_object_group_of_line, :check_stop_area, :unique_column_objectid_object_stop_area, :pattern_column_objectid_object_stop_area, :min_size_column_objectid_object_stop_area, :max_size_column_objectid_object_stop_area, :unique_column_name_object_stop_area, :pattern_column_name_object_stop_area, :min_size_column_name_object_stop_area, :max_size_column_name_object_stop_area, :unique_column_registration_number_object_stop_area, :pattern_column_registration_number_object_stop_area, :min_size_column_registration_number_object_stop_area, :max_size_column_registration_number_object_stop_area, :unique_column_city_name_object_stop_area, :pattern_column_city_name_object_stop_area, :min_size_column_city_name_object_stop_area, :max_size_column_city_name_object_stop_area, :unique_column_country_code_object_stop_area, :pattern_column_country_code_object_stop_area, :min_size_column_country_code_object_stop_area, :max_size_column_country_code_object_stop_area, :unique_column_zip_code_object_stop_area, :pattern_column_zip_code_object_stop_area, :min_size_column_zip_code_object_stop_area, :max_size_column_zip_code_object_stop_area, :check_access_point, :unique_column_objectid_object_access_point, :pattern_column_objectid_object_access_point, :min_size_column_objectid_object_access_point, :max_size_column_objectid_object_access_point, :unique_column_name_object_access_point, :pattern_column_name_object_access_point, :min_size_column_name_object_access_point, :max_size_column_name_object_access_point, :unique_column_city_name_object_access_point, :pattern_column_city_name_object_access_point, :min_size_column_city_name_object_access_point, :max_size_column_city_name_object_access_point, :unique_column_country_code_object_access_point, :pattern_column_country_code_object_access_point, :min_size_column_country_code_object_access_point, :max_size_column_country_code_object_access_point, :unique_column_zip_code_object_access_point, :pattern_column_zip_code_object_access_point, :min_size_column_zip_code_object_access_point, :max_size_column_zip_code_object_access_point, :check_access_link, :unique_column_objectid_object_access_link, :pattern_column_objectid_object_access_link, :min_size_column_objectid_object_access_link, :max_size_column_objectid_object_access_link, :unique_column_name_object_access_link, :pattern_column_name_object_access_link, :min_size_column_name_object_access_link, :max_size_column_name_object_access_link, :unique_column_link_distance_object_access_link, :min_size_column_link_distance_object_access_link, :max_size_column_link_distance_object_access_link, :unique_column_default_duration_object_access_link, :min_size_column_default_duration_object_access_link, :max_size_column_default_duration_object_access_link, :check_connection_link, :unique_column_objectid_object_connection_link, :pattern_column_objectid_object_connection_link, :min_size_column_objectid_object_connection_link, :max_size_column_objectid_object_connection_link, :unique_column_name_object_connection_link, :pattern_column_name_object_connection_link, :min_size_column_name_object_connection_link, :max_size_column_name_object_connection_link, :unique_column_link_distance_object_connection_link, :min_size_column_link_distance_object_connection_link, :max_size_column_link_distance_object_connection_link, :unique_column_default_duration_object_connection_link, :min_size_column_default_duration_object_connection_link, :max_size_column_default_duration_object_connection_link, :check_time_table, :unique_column_objectid_object_time_table, :pattern_column_objectid_object_time_table, :min_size_column_objectid_object_time_table, :max_size_column_objectid_object_time_table, :unique_column_comment_object_time_table, :pattern_column_comment_object_time_table, :min_size_column_comment_object_time_table, :max_size_column_comment_object_time_table, :unique_column_version_object_time_table, :pattern_column_version_object_time_table, :min_size_column_version_object_time_table, :max_size_column_version_object_time_table, :check_line, :unique_column_objectid_object_line, :pattern_column_objectid_object_line, :min_size_column_objectid_object_line, :max_size_column_objectid_object_line, :unique_column_name_object_line, :pattern_column_name_object_line, :min_size_column_name_object_line, :max_size_column_name_object_line, :unique_column_registration_number_object_line, :pattern_column_registration_number_object_line, :min_size_column_registration_number_object_line, :max_size_column_registration_number_object_line, :unique_column_number_object_line, :pattern_column_number_object_line, :min_size_column_number_object_line, :max_size_column_number_object_line, :unique_column_published_name_object_line, :pattern_column_published_name_object_line, :min_size_column_published_name_object_line, :max_size_column_published_name_object_line, :check_route, :unique_column_objectid_object_route, :pattern_column_objectid_object_route, :min_size_column_objectid_object_route, :max_size_column_objectid_object_route, :unique_column_name_object_route, :pattern_column_name_object_route, :min_size_column_name_object_route, :max_size_column_name_object_route, :unique_column_number_object_route, :pattern_column_number_object_route, :min_size_column_number_object_route, :max_size_column_number_object_route, :unique_column_published_name_object_route, :pattern_column_published_name_object_route, :min_size_column_published_name_object_route, :max_size_column_published_name_object_route, :check_journey_pattern, :unique_column_objectid_object_journey_pattern, :pattern_column_objectid_object_journey_pattern, :min_size_column_objectid_object_journey_pattern, :max_size_column_objectid_object_journey_pattern, :unique_column_name_object_journey_pattern, :pattern_column_name_object_journey_pattern, :min_size_column_name_object_journey_pattern, :max_size_column_name_object_journey_pattern, :unique_column_registration_number_object_journey_pattern, :pattern_column_registration_number_object_journey_pattern, :min_size_column_registration_number_object_journey_pattern, :max_size_column_registration_number_object_journey_pattern, :unique_column_published_name_object_journey_pattern, :pattern_column_published_name_object_journey_pattern, :min_size_column_published_name_object_journey_pattern, :max_size_column_published_name_object_journey_pattern, :check_vehicle_journey, :unique_column_objectid_object_vehicle_journey, :pattern_column_objectid_object_vehicle_journey, :min_size_column_objectid_object_vehicle_journey, :max_size_column_objectid_object_vehicle_journey, :unique_column_published_journey_name_object_vehicle_journey, :pattern_column_published_journey_name_object_vehicle_journey, :min_size_column_published_journey_name_object_vehicle_journey, :max_size_column_published_journey_name_object_vehicle_journey, :unique_column_published_journey_identifier_object_vehicle_journey, :pattern_column_published_journey_identifier_object_vehicle_journey, :min_size_column_published_journey_identifier_object_vehicle_journey, :max_size_column_published_journey_identifier_object_vehicle_journey, :unique_column_number_object_vehicle_journey, :min_size_column_number_object_vehicle_journey, :max_size_column_number_object_vehicle_journey) - end -end - diff --git a/app/decorators/compliance_check_decorator.rb b/app/decorators/compliance_check_decorator.rb new file mode 100644 index 000000000..5431f5796 --- /dev/null +++ b/app/decorators/compliance_check_decorator.rb @@ -0,0 +1,8 @@ +class ComplianceCheckDecorator < Draper::Decorator + delegate_all + + def action_links + [] + end + +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 9f2e2765f..0a7b0fb75 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -73,8 +73,6 @@ module ApplicationHelper "time_tables" when path.include?("/timebands") "timebands" - when path.include?("/rule_parameter_set") - "parametersets" when path.include?("/import_tasks") "imports" when path.include?("/exports") diff --git a/app/helpers/compliance_check_blocks_helper.rb b/app/helpers/compliance_check_blocks_helper.rb new file mode 100644 index 000000000..b4d858b07 --- /dev/null +++ b/app/helpers/compliance_check_blocks_helper.rb @@ -0,0 +1,3 @@ +module ComplianceCheckBlocksHelper + include TransportModeHelper +end diff --git a/app/helpers/compliance_check_sets_helper.rb b/app/helpers/compliance_check_sets_helper.rb new file mode 100644 index 000000000..fc7165fed --- /dev/null +++ b/app/helpers/compliance_check_sets_helper.rb @@ -0,0 +1,16 @@ +module ComplianceCheckSetsHelper + def compliance_check_set_path(compliance_check_set) + workbench_compliance_check_set_path(compliance_check_set.workbench, compliance_check_set) + end + + def executed_compliance_check_set_path(compliance_check_set) + executed_workbench_compliance_check_set_path(compliance_check_set.workbench, compliance_check_set) + end + + def compliance_check_path(compliance_check) + workbench_compliance_check_set_compliance_check_path( + compliance_check.compliance_check_set.workbench, + compliance_check.compliance_check_set, + compliance_check) + end +end diff --git a/app/helpers/compliance_control_blocks_helper.rb b/app/helpers/compliance_control_blocks_helper.rb index 311e6fb46..b53ac17ae 100644 --- a/app/helpers/compliance_control_blocks_helper.rb +++ b/app/helpers/compliance_control_blocks_helper.rb @@ -1,5 +1,5 @@ module ComplianceControlBlocksHelper - def transport_mode(transport_mode, transport_submode) + def compliance_transport_mode(transport_mode, transport_submode) return "[Tous les modes de transport]" if transport_mode == "" if transport_submode == "" "[" + t("enumerize.transport_mode.#{transport_mode}") + "]" diff --git a/app/helpers/referentials_helper.rb b/app/helpers/referentials_helper.rb index f3c18d9f8..01e5a5879 100644 --- a/app/helpers/referentials_helper.rb +++ b/app/helpers/referentials_helper.rb @@ -1,12 +1,13 @@ module ReferentialsHelper - # Line statuses helper + # Outputs a green check icon and the text "Oui" or a red exclamation mark + # icon and the text "Non" based on `status` def line_status(status) if status - cls = 'danger' - content_tag :span, status ? " #{t('false')} " : " #{t('true')}", class: "fa fa-exclamation-circle fa-lg text-#{cls}" + content_tag(:span, nil, class: 'fa fa-exclamation-circle fa-lg text-danger') + + t('false') else - cls = 'success' - content_tag :span, status ? " #{t('false')} " : " #{t('true')}", class: "fa fa-check-circle fa-lg text-#{cls}" + content_tag(:span, nil, class: 'fa fa-check-circle fa-lg text-success') + + t('true') end end end diff --git a/app/helpers/rule_parameter_sets_helper.rb b/app/helpers/rule_parameter_sets_helper.rb deleted file mode 100644 index bb210d9cd..000000000 --- a/app/helpers/rule_parameter_sets_helper.rb +++ /dev/null @@ -1,28 +0,0 @@ -module RuleParameterSetsHelper - - def unique( value) - return t("true") if value == "1" - t "false" - end - - def pattern(value) - return t("rule_parameter_sets.labels.free_char") if value == "0" - return t("rule_parameter_sets.labels.num_char") if value == "1" - return t("rule_parameter_sets.labels.alpha_char") if value == "2" - return t("rule_parameter_sets.labels.upper_char") if value == "3" - return t("rule_parameter_sets.labels.lower_char") if value == "4" - end - - def boolean_value(value) - return t("true") if value == "1" - t "false" - end - - def transport_mode_label_pairs - Chouette::TransportMode - .all - .zip_map { |mode| t("transport_modes.label.#{mode}") } - end -end - - diff --git a/app/helpers/transport_mode_helper.rb b/app/helpers/transport_mode_helper.rb new file mode 100644 index 000000000..7a486fc2d --- /dev/null +++ b/app/helpers/transport_mode_helper.rb @@ -0,0 +1,16 @@ +module TransportModeHelper + def transport_mode_text(transport_modable=nil) + mode = transport_modable.try(:transport_mode) + return "[Tous les modes de transport]" if mode.blank? + + submode = transport_modable.try(:transport_submode) + [translated_mode_name(:mode, mode), translated_mode_name(:submode, submode)].join + end + + private + def translated_mode_name mode_type, value + return "" if value.blank? + "[#{I18n.t("enumerize.transport_#{mode_type}.#{value}")}]" + end + +end diff --git a/app/models/compliance_check_block.rb b/app/models/compliance_check_block.rb index ee60a8bb1..05240b428 100644 --- a/app/models/compliance_check_block.rb +++ b/app/models/compliance_check_block.rb @@ -1,5 +1,13 @@ class ComplianceCheckBlock < ActiveRecord::Base + include StifTransportModeEnumerations + include StifTransportSubmodeEnumerations + belongs_to :compliance_check_set has_many :compliance_checks + + hstore_accessor :condition_attributes, + transport_mode: :string, + transport_submode: :string + end diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb index 5721c00f4..cfcdfd1a6 100644 --- a/app/models/compliance_control_block.rb +++ b/app/models/compliance_control_block.rb @@ -1,6 +1,6 @@ class ComplianceControlBlock < ActiveRecord::Base - extend StifTransportModeEnumerations - extend StifTransportSubmodeEnumerations + include StifTransportModeEnumerations + include StifTransportSubmodeEnumerations belongs_to :compliance_control_set has_many :compliance_controls, dependent: :destroy diff --git a/app/models/concerns/stif_transport_mode_enumerations.rb b/app/models/concerns/stif_transport_mode_enumerations.rb index c2d38c2c6..74621dfc5 100644 --- a/app/models/concerns/stif_transport_mode_enumerations.rb +++ b/app/models/concerns/stif_transport_mode_enumerations.rb @@ -1,19 +1,18 @@ module StifTransportModeEnumerations extend ActiveSupport::Concern - extend Enumerize - extend self - enumerize :transport_mode, in: %w(bus - metro - rail - tram - funicular) - - def transport_modes - StifTransportModeEnumerations.transport_mode.values + class << self + def transport_modes + %w(bus metro rail tram funicular) + end + def sorted_transport_modes + transport_modes.sort_by{|m| I18n.t("enumerize.transport_mode.#{m}").parameterize } + end end - - def sorted_transport_modes - self.transport_modes.sort_by{|m| I18n.t("enumerize.transport_mode.#{m}").parameterize } + + included do + extend Enumerize + enumerize :transport_mode, in: StifTransportModeEnumerations.transport_modes end + end diff --git a/app/models/concerns/stif_transport_submode_enumerations.rb b/app/models/concerns/stif_transport_submode_enumerations.rb index cf314badd..eb3e56eac 100644 --- a/app/models/concerns/stif_transport_submode_enumerations.rb +++ b/app/models/concerns/stif_transport_submode_enumerations.rb @@ -1,24 +1,28 @@ module StifTransportSubmodeEnumerations extend ActiveSupport::Concern - extend Enumerize - extend self - enumerize :transport_submode, in: %w(demandAndResponseBus - nightBus - airportLinkBus - highFrequencyBus - expressBus - railShuttle - suburbanRailway - regionalRail - interregionalRail -) + class << self + def transport_submodes + %w( + demandAndResponseBus + nightBus + airportLinkBus + highFrequencyBus + expressBus + railShuttle + suburbanRailway + regionalRail + interregionalRail) + end - def transport_submodes - StifTransportSubmodeEnumerations.transport_submode.values + def sorted_transport_submodes + transport_submodes.sort_by{|m| I18n.t("enumerize.transport_submode.#{m}").parameterize } + end end - def sorted_transport_submodes - self.transport_submodes.sort_by{|m| I18n.t("enumerize.transport_submode.#{m}").parameterize } + included do + extend Enumerize + enumerize :transport_submode, in: StifTransportSubmodeEnumerations.transport_submodes end + end diff --git a/app/models/import_task.rb b/app/models/import_task.rb index 0e1ab65be..7dfa2c644 100644 --- a/app/models/import_task.rb +++ b/app/models/import_task.rb @@ -12,7 +12,7 @@ class ImportTask cattr_accessor :root enumerize :data_format, in: %w( neptune netex gtfs ) - attr_accessor :rule_parameter_set_id, :referential_id, :user_id, :user_name, :data_format, :resources, :name, :no_save + attr_accessor :referential_id, :user_id, :user_name, :data_format, :resources, :name, :no_save validates_presence_of :referential_id validates_presence_of :resources @@ -34,10 +34,6 @@ class ImportTask referential.organisation end - def rule_parameter_set - organisation.rule_parameter_sets.find(rule_parameter_set_id) if rule_parameter_set_id.present? - end - def save if valid? # Save resources @@ -68,20 +64,10 @@ class ImportTask def params {}.tap do |h| - h["parameters"] = validation_params ? action_params.merge(validation_params) : action_params + h["parameters"] = {} end end - def action_params - {} - end - - def validation_params - { - "validation" => rule_parameter_set.parameters - } if rule_parameter_set.present? - end - def self.data_formats self.data_format.values end diff --git a/app/models/netex_import.rb b/app/models/netex_import.rb index 32939a741..a7a5bb9b8 100644 --- a/app/models/netex_import.rb +++ b/app/models/netex_import.rb @@ -1,19 +1,36 @@ require 'net/http' class NetexImport < Import + before_destroy :destroy_non_ready_referential + after_commit :launch_java_import, on: :create + before_save def abort_unless_referential + self.status = 'aborted' unless referential + end validates_presence_of :parent def launch_java_import return if self.class.finished_statuses.include?(status) + threaded_call_boiv_iev + end - Thread.new do - begin - Net::HTTP.get(URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/importer/new?id=#{id}")) - rescue Exception => e - logger.error "IEV server error : #{e.message}" - logger.error e.backtrace.inspect - end + private + + def destroy_non_ready_referential + if referential && !referential.ready + referential.destroy end end + + def threaded_call_boiv_iev + Thread.new(&method(:call_boiv_iev)) + end + + def call_boiv_iev + Net::HTTP.get(URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/importer/new?id=#{id}")) + rescue Exception => e + logger.error "IEV server error : #{e.message}" + logger.error e.backtrace.inspect + end + end diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 6104b4431..f6fba2d67 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -3,7 +3,6 @@ class Organisation < ActiveRecord::Base has_many :users, :dependent => :destroy has_many :referentials, :dependent => :destroy - # has_many :rule_parameter_sets, :dependent => :destroy has_many :compliance_control_sets, :dependent => :destroy has_many :stop_area_referential_memberships @@ -19,12 +18,6 @@ class Organisation < ActiveRecord::Base validates_presence_of :name validates_uniqueness_of :code - # after_create :add_rule_parameter_set - - # def add_rule_parameter_set - # RuleParameterSet.default_for_all_modes( self).save - # end - def self.portail_api_request conf = Rails.application.config.try(:stif_portail_api) raise 'Rails.application.config.stif_portail_api configuration is not defined' unless conf @@ -62,6 +55,7 @@ class Organisation < ActiveRecord::Base organisation_referential = referentials.find_by id: referential_id return organisation_referential if organisation_referential + # TODO: Replace each with find workbenches.each do |workbench| workbench_referential = workbench.all_referentials.find_by id: referential_id return workbench_referential if workbench_referential diff --git a/app/models/rule_parameter_set.rb b/app/models/rule_parameter_set.rb deleted file mode 100644 index 91e575822..000000000 --- a/app/models/rule_parameter_set.rb +++ /dev/null @@ -1,392 +0,0 @@ -class RuleParameterSet < ActiveRecord::Base - belongs_to :organisation - - #validates_presence_of :referential - validates_presence_of :name - - # Access to parent object - attr_accessor :import, :compliance_check - - serialize :parameters, JSON - - 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 - def self.general_attributes - %w( inter_stop_area_distance_min parent_stop_area_distance_max stop_areas_area inter_access_point_distance_min - inter_connection_link_distance_max walk_default_speed_max - walk_occasional_traveller_speed_max walk_frequent_traveller_speed_max walk_mobility_restricted_traveller_speed_max - inter_access_link_distance_max inter_stop_duration_max facility_stop_area_distance_max - check_allowed_transport_modes check_lines_in_groups check_line_routes - check_stop_parent check_connection_link_on_physical) - end - - def self.validable_objects - [Chouette::Network,Chouette::Company,Chouette::GroupOfLine, - Chouette::StopArea,Chouette::AccessPoint,Chouette::AccessLink,Chouette::ConnectionLink, - Chouette::TimeTable,Chouette::Line,Chouette::Route, - Chouette::JourneyPattern,Chouette::VehicleJourney] - end - - def self.validable_object_names - %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'] } - end - - @@objects_by_name = Hash[[validable_object_names, validable_objects].transpose].freeze - - def self.validable_object_class(object_name) - @@objects_by_name[object_name] - end - - def self.validable_column_type(object_name, column) - if object_class = validable_object_class(object_name) - object_class.columns_hash[column].try(:type) - end - end - - def self.column_attribute_prefixes - %w( unique pattern min_size max_size ) - end - - def self.all_modes - ["interchange", - "unknown", - "coach", - "air", - "waterborne", - "bus", - "ferry", - "walk", - "metro", - "shuttle", - "rapid_transit", - "taxi", - "local_train", - "train", - "long_distance_train", - "tramway", - "trolleybus", - "private_vehicle", - "bicycle", - "other"] - end - - def self.mode_attribute?( method_name ) - pattern = /(\w+)_mode_(\w+)/ - return false unless method_name.match( pattern) - - mode_attribute_prefixes.include?( $1) && self.class.all_modes.include?( $2) - end - - def self.column_attribute?( method_name ) - pattern = /(\w+)_column_(\w+)_object_(\w+)/ - return false unless method_name.match( pattern) - return false unless validable_object_names.include?($3) - column_attribute_prefixes.include?( $1) && validable_columns[$3].include?( $2) - end - - def self.mode_of_mode_attribute( method_name ) - method_name.match( /(\w+)_mode_(\w+)/) - $2 - end - def self.attribute_of_mode_attribute( method_name ) - method_name.match( /(\w+)_mode_(\w+)/) - $1 - end - - def self.object_of_column_attribute( method_name ) - method_name.match( /(\w+)_column_(\w+)_object_(\w+)/) - $3 - end - def self.column_of_column_attribute( method_name ) - method_name.match( /(\w+)_column_(\w+)_object_(\w+)/) - $2 - end - def self.attribute_of_column_attribute( method_name ) - method_name.match( /(\w+)_column_(\w+)_object_(\w+)/) - $1 - end - - - def self.mode_parameter(name) - name = name.to_s - #attr_accessible name - - define_method(name) do - attribute_name, mode = RuleParameterSet.attribute_of_mode_attribute( name), RuleParameterSet.mode_of_mode_attribute( name) - self.parameters and self.parameters["mode_#{mode}"] and - self.parameters["mode_#{mode}"][attribute_name] - end - - define_method("#{name}=") do |prefix| - attribute_name, mode = RuleParameterSet.attribute_of_mode_attribute( name), RuleParameterSet.mode_of_mode_attribute( name) - ((self.parameters ||= {})["mode_#{mode}"] ||= {})[attribute_name] = prefix - end - end - - def self.column_parameter(obj,column,prefix) - name = "#{prefix}_column_#{column}_object_#{obj}" - #attr_accessible name - define_method(name) do - attribute_name, column, obj = prefix, column, obj - self.parameters and self.parameters[obj] and - self.parameters[obj][column] and self.parameters[obj][column][attribute_name] - end - - define_method("#{name}=") do |key| - attribute_name, column, obj = prefix, column, obj - (((self.parameters ||= {})[obj] ||= {})[column]||= {})[attribute_name] = key - end - - end - - def self.object_parameter(clazz) - name = clazz.table_name.singularize - #attr_accessible name - - parameter "check_#{clazz.table_name.singularize}" - validable_columns[name].each do |column| - column_attribute_prefixes.each do |prefix| - column_parameter name,column,prefix - end - - end - - end - - def self.parameter(name) - name = name.to_s - #attr_accessible name - - define_method(name) do - self.parameters and self.parameters[name] - end - - define_method("#{name}=") do |prefix| - (self.parameters ||= {})[name] = prefix - end - end - - def self.default_params(mode=nil) - base = { :inter_stop_area_distance_min => 20, - :parent_stop_area_distance_max => 300, - :inter_access_point_distance_min => 20, - :inter_connection_link_distance_max => 400, - :walk_default_speed_max => 4, - :walk_occasional_traveller_speed_max => 2, - :walk_frequent_traveller_speed_max => 5, - :walk_mobility_restricted_traveller_speed_max => 1, - :inter_access_link_distance_max => 300, - :inter_stop_duration_max => 40, - :facility_stop_area_distance_max => 300, - :check_allowed_transport_modes => false, - :check_lines_in_groups => false, - :check_line_routes => false, - :check_stop_parent => false, - :check_connection_link_on_physical => false - } - if mode && self.mode_default_params[ mode.to_sym] - base.merge!( self.mode_default_params[ mode.to_sym]) - end - base - end - def self.mode_default_params - { - :coach => { - :allowed_transport_mode_coach => false, - :inter_stop_area_distance_min_mode_coach => 500, - :inter_stop_area_distance_max_mode_coach => 10000, - :speed_max_mode_coach => 90, - :speed_min_mode_coach => 40, - :inter_stop_duration_variation_max_mode_coach => 20}, - :air => { - :allowed_transport_mode_air => false, - :inter_stop_area_distance_min_mode_air => 200, - :inter_stop_area_distance_max_mode_air => 10000, - :speed_max_mode_air => 800, - :speed_min_mode_air => 700, - :inter_stop_duration_variation_max_mode_air => 60}, - :waterborne => { - :allowed_transport_mode_waterborne => false, - :inter_stop_area_distance_min_mode_waterborne => 200, - :inter_stop_area_distance_max_mode_waterborne => 10000, - :speed_max_mode_waterborne => 40, - :speed_min_mode_waterborne => 5, - :inter_stop_duration_variation_max_mode_waterborne => 60}, - :bus => { - :allowed_transport_mode_bus => false, - :inter_stop_area_distance_min_mode_bus => 100, - :inter_stop_area_distance_max_mode_bus => 10000, - :speed_max_mode_bus => 60, - :speed_min_mode_bus => 10, - :inter_stop_duration_variation_max_mode_bus => 15}, - :ferry => { - :allowed_transport_mode_ferry => false, - :inter_stop_area_distance_min_mode_ferry => 200, - :inter_stop_area_distance_max_mode_ferry => 10000, - :speed_max_mode_ferry => 40, - :speed_min_mode_ferry => 5, - :inter_stop_duration_variation_max_mode_ferry => 60}, - :walk => { - :allowed_transport_mode_walk => false, - :inter_stop_area_distance_min_mode_walk => 1, - :inter_stop_area_distance_max_mode_walk => 10000, - :speed_max_mode_walk => 6, - :speed_min_mode_walk => 1, - :inter_stop_duration_variation_max_mode_walk => 10}, - :metro => { - :allowed_transport_mode_metro => false, - :inter_stop_area_distance_min_mode_metro => 300, - :inter_stop_area_distance_max_mode_metro => 2000, - :speed_max_mode_metro => 60, - :speed_min_mode_metro => 30, - :inter_stop_duration_variation_max_mode_metro => 30}, - :shuttle => { - :allowed_transport_mode_shuttle => false, - :inter_stop_area_distance_min_mode_shuttle => 500, - :inter_stop_area_distance_max_mode_shuttle => 10000, - :speed_max_mode_shuttle => 80, - :speed_min_mode_shuttle => 20, - :inter_stop_duration_variation_max_mode_shuttle => 10}, - :rapid_transit => { - :allowed_transport_mode_rapid_transit => false, - :inter_stop_area_distance_min_mode_rapid_transit => 2000, - :inter_stop_area_distance_max_mode_rapid_transit => 500000, - :speed_max_mode_rapid_transit => 300, - :speed_min_mode_rapid_transit => 20, - :inter_stop_duration_variation_max_mode_rapid_transit => 60}, - :taxi => { - :allowed_transport_mode_taxi => false, - :inter_stop_area_distance_min_mode_taxi => 500, - :inter_stop_area_distance_max_mode_taxi => 300000, - :speed_max_mode_taxi => 130, - :speed_min_mode_taxi => 20, - :inter_stop_duration_variation_max_mode_taxi => 60}, - :local_train => { - :allowed_transport_mode_local_train => false, - :inter_stop_area_distance_min_mode_local_train => 2000, - :inter_stop_area_distance_max_mode_local_train => 500000, - :speed_max_mode_local_train => 300, - :speed_min_mode_local_train => 20, - :inter_stop_duration_variation_max_mode_local_train => 60}, - :train => { - :allowed_transport_mode_train => false, - :inter_stop_area_distance_min_mode_train => 2000, - :inter_stop_area_distance_max_mode_train => 500000, - :speed_max_mode_train => 300, - :speed_min_mode_train => 20, - :inter_stop_duration_variation_max_mode_train => 60}, - :long_distance_train => { - :allowed_transport_mode_long_distance_train => false, - :inter_stop_area_distance_min_mode_long_distance_train => 2000, - :inter_stop_area_distance_max_mode_long_distance_train => 500000, - :speed_max_mode_long_distance_train => 300, - :speed_min_mode_long_distance_train => 20, - :inter_stop_duration_variation_max_mode_long_distance_train => 60}, - :tramway => { - :allowed_transport_mode_tramway => false, - :inter_stop_area_distance_min_mode_tramway => 300, - :inter_stop_area_distance_max_mode_tramway => 2000, - :speed_max_mode_tramway => 50, - :speed_min_mode_tramway => 20, - :inter_stop_duration_variation_max_mode_tramway => 30}, - :trolleybus => { - :allowed_transport_mode_trolleybus => false, - :inter_stop_area_distance_min_mode_trolleybus => 300, - :inter_stop_area_distance_max_mode_trolleybus => 2000, - :speed_max_mode_trolleybus => 50, - :speed_min_mode_trolleybus => 20, - :inter_stop_duration_variation_max_mode_trolleybus => 30}, - :private_vehicle => { - :allowed_transport_mode_private_vehicle => false, - :inter_stop_area_distance_min_mode_private_vehicle => 500, - :inter_stop_area_distance_max_mode_private_vehicle => 300000, - :speed_max_mode_private_vehicle => 130, - :speed_min_mode_private_vehicle => 20, - :inter_stop_duration_variation_max_mode_private_vehicle => 60}, - :bicycle => { - :allowed_transport_mode_bicycle => false, - :inter_stop_area_distance_min_mode_bicycle => 300, - :inter_stop_area_distance_max_mode_bicycle => 30000, - :speed_max_mode_bicycle => 40, - :speed_min_mode_bicycle => 10, - :inter_stop_duration_variation_max_mode_bicycle => 10}, - :other => { - :allowed_transport_mode_other => false, - :inter_stop_area_distance_min_mode_other => 300, - :inter_stop_area_distance_max_mode_other => 30000, - :speed_max_mode_other => 40, - :speed_min_mode_other => 10, - :inter_stop_duration_variation_max_mode_other => 10}, - } - # :waterborne, :bus, :ferry, :walk, :metro, :shuttle, :rapidtransit, :taxi, :localtrain, :train, :longdistancetrain, :tramway, :trolleybus, :privatevehicle, :bicycle, :other - end - def self.default(organisation) - self.default_for_all_modes(organisation).tap do |rps| - rps.name = "" - end - end - def self.default_for_all_modes(organisation) - mode_attributes = mode_default_params.values.inject(self.default_params){|memo, obj| memo.merge! obj} - self.new( - { :organisation_id => organisation.id, - :name => "valeurs par defaut" - }.merge(mode_attributes)) - end - - def allowed(mode) - return true unless self.check_allowed_transport_modes == "1" - # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s - return self.send("allowed_transport_mode_#{mode}") == "1" - end - - def selected(object) - # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s - return self.send("check_#{object}") == "1" - end - - def selected_column(object,column) - # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s - return self.send("unique_column_#{column}_object_#{object}") == "1" || - self.send("pattern_column_#{column}_object_#{object}") != "0" || - !self.send("min_size_column_#{column}_object_#{object}").empty? || - !self.send("max_size_column_#{column}_object_#{object}").empty? - end - - - all_modes.each do |mode| - mode_attribute_prefixes.each do |prefix| - mode_parameter "#{prefix}_mode_#{mode}".to_sym - end - end - - general_attributes.each do |attribute| - parameter attribute.to_sym - unless attribute == "stop_areas_area" || attribute == "check_allowed_transport_modes" - validates attribute.to_sym, :numericality => true, :allow_nil => true, :allow_blank => true - end - end - - - validable_objects.each do |obj| - object_parameter obj - end - - -end diff --git a/app/views/compliance_check_sets/executed.html.slim b/app/views/compliance_check_sets/executed.html.slim new file mode 100644 index 000000000..bb055272d --- /dev/null +++ b/app/views/compliance_check_sets/executed.html.slim @@ -0,0 +1,84 @@ +- breadcrumb :compliance_check_set, @workbench, @compliance_check_set +/ PageHeader += pageheader 'jeux-de-donnees', + t('compliance_check_sets.executed.title', name: @compliance_check_set.name) +/ PageContent +.page_content + .container-fluid + .row + .col-lg-6.col-md-6.col-sm-12.col-xs-12 + = definition_list t('metadatas'), + ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.name + + - if params[:q].present? || @blocks_to_compliance_checks_map.any? || @direct_compliance_checks + .row + .col-lg-12 + = render '/compliance_checks/filters' + + - if @direct_compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text() + .row + .col-lg-12 + = table_builder_2 @direct_compliance_checks, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_check| \ + compliance_check_path(compliance_check) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceCheck + + - @blocks_to_compliance_checks_map.each do |block, compliance_checks| + + - if compliance_checks.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text(block) + .row + .col-lg-12 + = table_builder_2 compliance_checks, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_check| \ + compliance_check_path(compliance_check) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceCheck diff --git a/app/views/compliance_check_sets/show.html.slim b/app/views/compliance_check_sets/show.html.slim deleted file mode 100644 index eefa5363f..000000000 --- a/app/views/compliance_check_sets/show.html.slim +++ /dev/null @@ -1,12 +0,0 @@ -- breadcrumb :compliance_check_set, @workbench, @compliance_check_set -/ PageHeader -= pageheader 'jeux-de-donnees', - @compliance_check_set.referential.name -/ PageContent -.page_content - .container-fluid - .row - .col-lg-6.col-md-6.col-sm-12.col-xs-12 - = definition_list t('metadatas'), - ComplianceCheckSet.human_attribute_name(:id) => @compliance_check_set.referential.id, - ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.referential.name diff --git a/app/views/compliance_checks/_filters.html.slim b/app/views/compliance_checks/_filters.html.slim new file mode 100644 index 000000000..0d747da27 --- /dev/null +++ b/app/views/compliance_checks/_filters.html.slim @@ -0,0 +1,47 @@ +/ Compliance Check Filter += search_form_for @q_checks_form, + url: executed_compliance_check_set_path(@compliance_check_set), + builder: SimpleForm::FormBuilder, + class: 'form form-filter' do |f| + + .ffg-row + .input-group.search_bar + = f.search_field :name_cont, + class: 'form-control', + placeholder: t('compliance_checks.filters.name') + span.input-group-btn + button.btn.btn-default type='submit' + span.fa.fa-search + + .ffg-row + .form-group.togglable#compliance_check_block-filter + = f.label t('activerecord.models.compliance_check_block.one'), required: false, class: 'control-label' + = f.input :compliance_check_block_id_eq_any, + collection: @compliance_check_set.compliance_check_blocks, + as: :check_boxes, + label: false, + label_method: lambda {|w| ("<span>#{transport_mode_text(w)}</span>").html_safe}, + required: false, + wrapper_html: {class: 'checkbox_list'} + .form-group.togglable#subclass-filter + = f.label t('compliance_checks.filters.subclass'), required: false, class: 'control-label' + = f.input :origin_code_cont_any, + collection: subclass_selection_list, + as: :check_boxes, + label: false, + label_method: lambda {|w| ("<span>#{w.first}</span>").html_safe}, + required: false, + wrapper_html: {class: 'checkbox_list'} + .form-group.togglable#severity-filter + = f.label t('compliance_checks.filters.criticity'), required: false, class: 'control-label' + = f.input :criticity_eq_any, + collection: ComplianceControl.criticities, + as: :check_boxes, + label: false, + label_method: lambda {|w| ("<span>#{w}</span>").html_safe}, + required: false, + wrapper_html: {class: 'checkbox_list'} + + .actions + = link_to t('actions.erase'), executed_compliance_check_set_path(@compliance_check_set), class: 'btn btn-link' + = f.submit t('actions.filter'), class: 'btn btn-default', id: 'compliance_check_set_compliance_checks_filter_btn' diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim index 2bd663578..71b71f842 100644 --- a/app/views/compliance_control_sets/show.html.slim +++ b/app/views/compliance_control_sets/show.html.slim @@ -1,8 +1,7 @@ - breadcrumb :compliance_control_set, @compliance_control_set / PageHeader = pageheader 'jeux-de-controle', - t('compliance_control_sets.show.title', name: @compliance_control_set.name), - 'Lorem ipsum dolor sit amet' + t('compliance_control_sets.show.title', name: @compliance_control_set.name) / Below is secondary actions & optional contents (filters, ...) .row.mb-sm @@ -25,21 +24,65 @@ = definition_list t('metadatas'), ComplianceControlSet.human_attribute_name(:name) => @compliance_control_set.name, I18n.t('activerecord.attributes.compliance_control_set.owner_jdc') => @compliance_control_set.organisation.name - - if params[:q].present? or @compliance_controls.any? + + - if params[:q].present? || @blocks_to_compliance_controls_map.any? || @direct_compliance_controls .row .col-lg-12 = render '/compliance_controls/filters' - .row - .col-lg-12 - h2 - = transport_mode("", "") - - if @indirect_compliance_controls.try(:any?) + - if @direct_compliance_controls.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text() + .row + .col-lg-12 + .select_table + = table_builder_2 @direct_compliance_controls, + [ \ + TableBuilderHelper::Column.new( \ + key: :code, \ + attribute: 'code' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |compliance_control| \ + compliance_control_set_compliance_control_path(@compliance_control_set, compliance_control) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :criticity, \ + attribute: 'criticity' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :comment, \ + attribute: 'comment' \ + ), \ + ], + sortable: true, + cls: 'table has-filter has-search', + model: ComplianceControl + + - @blocks_to_compliance_controls_map.each do |block, compliance_controls| + + - if compliance_controls.try(:any?) + .row + .col-lg-12 + h2 + = transport_mode_text(block) + .btn-group + .btn.dropdown-toggle{ data-toggle="dropdown" } + .span.fa.fa-cog + ul.dropdown-menu + li + = link_to t('compliance_control_sets.actions.edit'), edit_compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id) + = link_to t('compliance_control_sets.actions.destroy'), compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id), :method => :delete, :data => {:confirm => t('compliance_control_sets.actions.destroy_confirm')} .row .col-lg-12 .select_table - = table_builder_2 @indirect_compliance_controls, + = table_builder_2 compliance_controls, [ \ TableBuilderHelper::Column.new( \ key: :code, \ @@ -65,47 +108,15 @@ cls: 'table has-filter has-search', model: ComplianceControl - - @compliance_controls.each do |block, compliance_controls| - - - if compliance_controls.try(:any?) - .row - .col-lg-12 - h2 - = transport_mode(block.transport_mode, block.transport_submode) - .btn-group - .btn.dropdown-toggle{ data-toggle="dropdown" } - .span.fa.fa-cog - ul.dropdown-menu - li - = link_to t('compliance_control_sets.actions.edit'), edit_compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id) if policy(ComplianceControlBlock).update? if policy(ComplianceControlBlock).update? - = link_to t('compliance_control_sets.actions.destroy'), compliance_control_set_compliance_control_block_path(@compliance_control_set.id, block.id), :method => :delete, :data => {:confirm => t('compliance_control_sets.actions.destroy_confirm')} if policy(ComplianceControlBlock).destroy? - .row - .col-lg-12 - .select_table - = table_builder_2 compliance_controls, - [ \ - TableBuilderHelper::Column.new( \ - key: :code, \ - attribute: 'code' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :name, \ - attribute: 'name', \ - link_to: lambda do |compliance_control| \ - compliance_control_set_compliance_control_path(@compliance_control_set, compliance_control) \ - end \ - ), \ - TableBuilderHelper::Column.new( \ - key: :criticity, \ - attribute: 'criticity' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :comment, \ - attribute: 'comment' \ - ), \ - ], - sortable: true, - cls: 'table has-filter has-search', - model: ComplianceControl - - = flotted_links(@compliance_control_set.id)
\ No newline at end of file + .select_toolbox + ul + li.st_action.with_text + = link_to select_type_compliance_control_set_compliance_controls_path(@compliance_control_set.id) + span.fa.fa-plus + span + = t('compliance_control_sets.actions.add_compliance_control') + li.st_action.with_text + = link_to new_compliance_control_set_compliance_control_block_path(@compliance_control_set.id) + span.fa.fa-plus + span + = t('compliance_control_sets.actions.add_compliance_control_block') diff --git a/app/views/compliance_controls/_filters.html.slim b/app/views/compliance_controls/_filters.html.slim index c729190a0..d38da5d2d 100644 --- a/app/views/compliance_controls/_filters.html.slim +++ b/app/views/compliance_controls/_filters.html.slim @@ -1,3 +1,4 @@ +/ Compliance Control Filter = search_form_for @q_controls_form, url: compliance_control_set_path(@compliance_control_set), builder: SimpleForm::FormBuilder, @@ -19,7 +20,7 @@ collection: @compliance_control_set.compliance_control_blocks, as: :check_boxes, label: false, - label_method: lambda {|w| ("<span>#{transport_mode(w.transport_mode, w.transport_submode)}</span>").html_safe}, + label_method: lambda {|w| ("<span>#{transport_mode_text(w)}</span>").html_safe}, required: false, wrapper_html: {class: 'checkbox_list'} .form-group.togglable#subclass-filter diff --git a/app/views/import_tasks/new.html.slim b/app/views/import_tasks/new.html.slim index b4b77d344..dad004759 100644 --- a/app/views/import_tasks/new.html.slim +++ b/app/views/import_tasks/new.html.slim @@ -16,13 +16,12 @@ ul.nav.nav-pills = 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 = 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 -= javascript_include_tag new_referential_import_task_path(@referential, :format => :js)
\ No newline at end of file += javascript_include_tag new_referential_import_task_path(@referential, :format => :js) diff --git a/app/views/lines/_filters.html.slim b/app/views/lines/_filters.html.slim index 7662c41b5..58f8f2431 100644 --- a/app/views/lines/_filters.html.slim +++ b/app/views/lines/_filters.html.slim @@ -17,11 +17,11 @@ .form-group.togglable = f.label Chouette::Line.human_attribute_name(:transport_mode), required: false, class: 'control-label' - = f.input :transport_mode_eq_any, collection: Chouette::Line.sorted_transport_modes, as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + t("enumerize.transport_mode.#{l}") + "</span>").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} + = f.input :transport_mode_eq_any, collection: StifTransportModeEnumerations.sorted_transport_modes, as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + t("enumerize.transport_mode.#{l}") + "</span>").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} .form-group.togglable = f.label Chouette::Line.human_attribute_name(:transport_submode), required: false, class: 'control-label' - = f.input :transport_submode_eq_any, collection: Chouette::Line.sorted_transport_submodes, as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + t("enumerize.transport_submode.#{l}") + "</span>").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} + = f.input :transport_submode_eq_any, collection: StifTransportSubmodeEnumerations.sorted_transport_submodes, as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + t("enumerize.transport_submode.#{l}") + "</span>").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'} .actions = link_to 'Effacer', @workbench, class: 'btn btn-link' diff --git a/app/views/organisations/show.html.slim b/app/views/organisations/show.html.slim index 89e3b2870..e7ab18dd3 100644 --- a/app/views/organisations/show.html.slim +++ b/app/views/organisations/show.html.slim @@ -27,8 +27,3 @@ = link_to t('organisations.actions.edit'), edit_organisation_path, class: 'edit' li = link_to t('users.actions.new'), new_organisation_user_path, class: 'add' - - / FIXME ref #2007 - - if false - li - = link_to t('rule_parameter_sets.actions.new'), new_organisation_rule_parameter_set_path, class: 'add' diff --git a/app/views/rule_parameter_sets/_column_fields.html.slim b/app/views/rule_parameter_sets/_column_fields.html.slim deleted file mode 100644 index 176318765..000000000 --- a/app/views/rule_parameter_sets/_column_fields.html.slim +++ /dev/null @@ -1,13 +0,0 @@ -td -td = t("activerecord.attributes.#{object_name}.#{column}") -- suffix = "column_#{column}_object_#{object_name}" -td = f.check_box "unique_#{suffix}".to_sym, class: 'special' - -- if RuleParameterSet.validable_column_type(object_name, column) == :string - td - = f.select "pattern_#{suffix}".to_sym, options_for_select([[t("rule_parameter_sets.labels.free_char"), "0"], [t("rule_parameter_sets.labels.num_char"), "1"], [t("rule_parameter_sets.labels.alpha_char"), "2"], [t("rule_parameter_sets.labels.upper_char"), "3"], [t("rule_parameter_sets.labels.lower_char"), "4"]]) -- else - td = t('rule_parameter_sets.labels.num_char') - -td = f.number_field "min_size_#{suffix}".to_sym, class: 'special' -td = f.number_field "max_size_#{suffix}".to_sym, class: 'special' diff --git a/app/views/rule_parameter_sets/_form.html.slim b/app/views/rule_parameter_sets/_form.html.slim deleted file mode 100644 index b93caae58..000000000 --- a/app/views/rule_parameter_sets/_form.html.slim +++ /dev/null @@ -1,73 +0,0 @@ -= semantic_form_for [ :organisation, @rule_parameter_set] do |form| - = form.inputs do - = form.input :name - = form.input :inter_stop_area_distance_min, as: :number - = form.input :parent_stop_area_distance_max, as: :number - = form.input :stop_areas_area - = form.input :inter_access_point_distance_min, as: :number - = form.input :inter_connection_link_distance_max, as: :number - = form.input :walk_default_speed_max, as: :number - = form.input :walk_occasional_traveller_speed_max, as: :number - = form.input :walk_frequent_traveller_speed_max, as: :number - = form.input :walk_mobility_restricted_traveller_speed_max, as: :number - - = form.input :inter_access_link_distance_max, as: :number - = form.input :inter_stop_duration_max, as: :number - = form.input :facility_stop_area_distance_max, as: :number - - = form.input :check_lines_in_groups, as: :boolean - = form.input :check_line_routes, as: :boolean - = form.input :check_stop_parent, as: :boolean - = form.input :check_connection_link_on_physical, as: :boolean - = form.input :check_allowed_transport_modes, as: :boolean - - table.table.table-striped.table-condensed - thead - tr - th = t("transport_modes.name") - - - RuleParameterSet.mode_attribute_prefixes.each do |prefix| - - if prefix == "allowed_transport" - - hidden = (@rule_parameter_set.check_allowed_transport_modes == "1") ? "" : 'display:none;' - th.allowed style="#{hidden}" - = RuleParameterSet.human_attribute_name(prefix) - - else - th = RuleParameterSet.human_attribute_name(prefix) - - tbody - / To be removed, see #1936 - - Chouette::Line.transport_mode.values.each do |mode| - tr - == render partial: "mode_fields", :locals => { f: form, mode: mode } - - = t("rule_parameter_sets.labels.columns_restrictions") - - table.table.table-bordered.table-condensed - - RuleParameterSet.validable_object_names.each do |object_name| - thead - tr - th - = form.check_box "check_#{object_name}".to_sym, class: 'special' - = t("activerecord.models.#{object_name}.one") - - th = RuleParameterSet.human_attribute_name("attribute") - th = RuleParameterSet.human_attribute_name("unique") - th = RuleParameterSet.human_attribute_name("string_type") - th = RuleParameterSet.human_attribute_name("min_size") - th = RuleParameterSet.human_attribute_name("max_size") - - tbody - - RuleParameterSet.validable_columns[object_name].each do |col| - tr class="columns_for_#{object_name.pluralize}" - == render partial: "column_fields", :locals => { f: form, object_name: object_name, column: col } - - = form.actions do - = form.action :submit, as: :button - = form.action :cancel, as: :link - -javascript: - $(function() { - $( "#rule_parameter_set_check_allowed_transport_modes").change( function() { - $(".allowed").toggle(); - }); - }); diff --git a/app/views/rule_parameter_sets/_mode_fields.html.slim b/app/views/rule_parameter_sets/_mode_fields.html.slim deleted file mode 100644 index 848e065f3..000000000 --- a/app/views/rule_parameter_sets/_mode_fields.html.slim +++ /dev/null @@ -1,9 +0,0 @@ -td = t("transport_modes.label.#{mode}") - -- RuleParameterSet.mode_attribute_prefixes.each do |prefix| - - if prefix == "allowed_transport" - - hidden = (@rule_parameter_set.check_allowed_transport_modes == "1") ? "" : 'display: none;' - td.allowed style="#{hidden}" - = f.check_box "#{prefix}_mode_#{mode}".to_sym, class: 'special' - - else - td = f.number_field "#{prefix}_mode_#{mode}".to_sym, class: 'special'
\ No newline at end of file diff --git a/app/views/rule_parameter_sets/_mode_selection.html.slim b/app/views/rule_parameter_sets/_mode_selection.html.slim deleted file mode 100644 index b9afd10b6..000000000 --- a/app/views/rule_parameter_sets/_mode_selection.html.slim +++ /dev/null @@ -1,4 +0,0 @@ -/ select.undescribed_modes -/ - Chouette::TransportMode.all.map { |m| m.name.downcase}.each do |mode| -/ option value="#{mode}" -/ = t("transport_modes.label.#{mode}")
\ No newline at end of file diff --git a/app/views/rule_parameter_sets/_rule_parameter_set.html.slim b/app/views/rule_parameter_sets/_rule_parameter_set.html.slim deleted file mode 100644 index 5603d2b80..000000000 --- a/app/views/rule_parameter_sets/_rule_parameter_set.html.slim +++ /dev/null @@ -1,14 +0,0 @@ -#index_item.panel.panel-default.rule_parameter_set - .panel-heading - .panel-title.clearfix - span.pull-right - = link_to edit_organisation_rule_parameter_set_path( rule_parameter_set), class: 'btn btn-default btn-sm' do - span.fa.fa-pencil - - - if rule_parameter_set.organisation.rule_parameter_sets.size > 1 - = link_to organisation_rule_parameter_set_path( rule_parameter_set), method: :delete, data: { confirm: t('rule_parameter_sets.actions.destroy_confirm') }, class: 'btn btn-danger btn-sm' do - span.fa.fa-trash-o - - h5 - = link_to( organisation_rule_parameter_set_path( rule_parameter_set), class: 'preview', title: "#{RuleParameterSet.model_name.human.capitalize} #{rule_parameter_set.name}") do - span.name = truncate(rule_parameter_set.name, length: 20)
\ No newline at end of file diff --git a/app/views/rule_parameter_sets/_transport_mode_parameter_set_fields.html.slim b/app/views/rule_parameter_sets/_transport_mode_parameter_set_fields.html.slim deleted file mode 100644 index ede7e2b75..000000000 --- a/app/views/rule_parameter_sets/_transport_mode_parameter_set_fields.html.slim +++ /dev/null @@ -1,9 +0,0 @@ -= f.inputs class: 'transport_mode_parameter_sets nested-fields' do - = f.input :transport_mode, as: :select, collection: transport_mode_label_pairs, include_blank: false, label: "transport_mode", wrapper_html: { class: 'fl1' } - = f.input :inter_stop_area_distance_min, as: :number, label: "inter_stop_area_distance_min", wrapper_html: { class: 'fl1' } - = f.input :inter_stop_area_distance_max, as: :number, label: "inter_stop_area_distance_max", wrapper_html: { class: 'fl2' } - = f.input :speed_min, as: :number, label: "speed_min", wrapper_html: { class: 'fl2' } - = f.input :speed_max, as: :number, label: "speed_max", wrapper_html: { class: 'fl2' } - = f.input :inter_stop_duration_variation_max, as: :number, label: "inter_stop_duration_variation_max", wrapper_html: { class: 'fl2' } - - = link_to_remove_association t('actions.destroy'), f diff --git a/app/views/rule_parameter_sets/edit.html.slim b/app/views/rule_parameter_sets/edit.html.slim deleted file mode 100644 index b49b02cf6..000000000 --- a/app/views/rule_parameter_sets/edit.html.slim +++ /dev/null @@ -1,3 +0,0 @@ -= title_tag t('rule_parameter_sets.edit.title', rule_parameter_set: @rule_parameter_set.name ) - -== render 'form'
\ No newline at end of file diff --git a/app/views/rule_parameter_sets/index.html.slim b/app/views/rule_parameter_sets/index.html.slim deleted file mode 100644 index 6be57d68e..000000000 --- a/app/views/rule_parameter_sets/index.html.slim +++ /dev/null @@ -1,7 +0,0 @@ -= title_tag t('rule_parameter_sets.index.title') - -= paginated_content(@rule_parameter_sets) - -- content_for :sidebar do - ul.actions - li = link_to t('rule_parameter_sets.actions.new'), new_organisation_rule_parameter_set_path, class: 'add'
\ No newline at end of file diff --git a/app/views/rule_parameter_sets/mode.js.slim b/app/views/rule_parameter_sets/mode.js.slim deleted file mode 100644 index 392446a7c..000000000 --- a/app/views/rule_parameter_sets/mode.js.slim +++ /dev/null @@ -1,9 +0,0 @@ -| if ( $("#specific_parameters_#{@mode}").length == 0 ) { -| - form_content = "" -| - semantic_form_for [@referential, @rule_parameter_set] do |form| -| - form_content += render(partial: 'mode_fields', locals: { mode: @mode, f: form }) -| $('#added_mode_parameter_set').before("#{escape_javascript(form_content).html_safe}"); -| } else { -| $("#_destroy_mode_#{@mode}").attr( "value", false); -| $("#specific_parameters_#{@mode}").toggle(); -| }
\ No newline at end of file diff --git a/app/views/rule_parameter_sets/new.html.slim b/app/views/rule_parameter_sets/new.html.slim deleted file mode 100644 index c4e4c5b4d..000000000 --- a/app/views/rule_parameter_sets/new.html.slim +++ /dev/null @@ -1,3 +0,0 @@ -= title_tag t('rule_parameter_sets.new.title') - -== render 'form'
\ No newline at end of file diff --git a/app/views/rule_parameter_sets/show.html.slim b/app/views/rule_parameter_sets/show.html.slim deleted file mode 100644 index 6adfeab89..000000000 --- a/app/views/rule_parameter_sets/show.html.slim +++ /dev/null @@ -1,143 +0,0 @@ -= title_tag t('rule_parameter_sets.show.title', :rule_parameter_set => @rule_parameter_set.name ) - -.rule_parameter_set_show - .summary - p - label = "#{RuleParameterSet.human_attribute_name('stop_areas_area')} : " - = @rule_parameter_set.stop_areas_area - - .attributes_group - span.title = t(".min_distance") - - .columns - .two_columns - label = "#{t('.inter_stop_area_distance_min')} : " - span.value = @rule_parameter_set.inter_stop_area_distance_min - - .two_columns - label = "#{t('.inter_access_point_distance_min')} : " - span.value = @rule_parameter_set.inter_access_point_distance_min - - .attributes_group - span.title = t(".max_distance") - - .columns - .two_columns - label = "#{t('.parent_stop_area_distance_max')} : " - span.value = @rule_parameter_set.parent_stop_area_distance_max - - .two_columns - label = "#{t('.inter_connection_link_distance_max')} : " - span.value = @rule_parameter_set.inter_connection_link_distance_max - - .columns - .two_columns - label = "#{t('.inter_access_link_distance_max')} : " - span.value = @rule_parameter_set.inter_access_link_distance_max - - .two_columns - label = "#{t('.facility_stop_area_distance_max')} : " - span.value = @rule_parameter_set.facility_stop_area_distance_max - - .attributes_group - span.title = t(".walk_speed") - - .columns - .four_columns - label = "#{t('.walk_default_speed_max')} : " - span.value = @rule_parameter_set.walk_default_speed_max - - .four_columns - label = "#{t('.walk_occasional_traveller_speed_max')} : " - span.value = @rule_parameter_set.walk_occasional_traveller_speed_max - - .four_columns - label = "#{t('.walk_frequent_traveller_speed_max')} : " - span.value = @rule_parameter_set.walk_frequent_traveller_speed_max - - .four_columns - label = "#{t('.walk_mobility_restricted_traveller_speed_max')} : " - span.value = @rule_parameter_set.walk_mobility_restricted_traveller_speed_max - - p - label = "#{t('.inter_stop_duration_max')} :" - = @rule_parameter_set.inter_stop_duration_max - - p - label = "#{RuleParameterSet.human_attribute_name('check_lines_in_groups')} : " - = boolean_value(@rule_parameter_set.check_lines_in_groups) - - p - label = "#{RuleParameterSet.human_attribute_name('check_line_routes')} : " - = boolean_value(@rule_parameter_set.check_line_routes) - - p - label = "#{RuleParameterSet.human_attribute_name('check_stop_parent')} : " - = boolean_value(@rule_parameter_set.check_stop_parent) - - p - label = "#{RuleParameterSet.human_attribute_name('check_connection_link_on_physical')} : " - = boolean_value(@rule_parameter_set.check_connection_link_on_physical) - - p - label = "#{RuleParameterSet.human_attribute_name('check_allowed_transport_modes')} : " - = boolean_value(@rule_parameter_set.check_allowed_transport_modes) - - .rule_parameter_by_mode - label - = t(".rule_parameter_by_mode") - = t(".modes_allowed") if @rule_parameter_set.check_allowed_transport_modes == "1" - - table.table.table-striped.table-condensed - tr - th = t("transport_modes.name") - - - RuleParameterSet.mode_attribute_prefixes.each do |prefix| - - unless prefix == "allowed_transport" - th = RuleParameterSet.human_attribute_name(prefix) - / To be removed, see #1936 - - Chouette::Line.transport_mode.values.each do |mode| - - if @rule_parameter_set.allowed(mode) - tr - td = t("transport_modes.label.#{mode}") - - - RuleParameterSet.mode_attribute_prefixes.each do |prefix| - - unless prefix == "allowed_transport" - td = @rule_parameter_set.send "#{prefix}_mode_#{mode}" - - .rule_parameter_by_object - label = t("rule_parameter_sets.labels.columns_restrictions") - - table.table.table-bordered.table-condensed - - RuleParameterSet.validable_object_names.each do |object_name| - - if @rule_parameter_set.selected(object_name) - thead - tr - th = t("activerecord.models.#{object_name}.one") - th = RuleParameterSet.human_attribute_name("attribute") - th = RuleParameterSet.human_attribute_name("unique") - th = RuleParameterSet.human_attribute_name("string_type") - th = RuleParameterSet.human_attribute_name("min_size") - th = RuleParameterSet.human_attribute_name("max_size") - - tbody - - RuleParameterSet.validable_columns[object_name].each do |col| - - if @rule_parameter_set.selected_column(object_name,col) - tr - td - td = t("activerecord.attributes.#{object_name}.#{col}") - - suffix = "column_#{col}_object_#{object_name}" - td = unique(@rule_parameter_set.send "unique_#{suffix}".to_sym) - td = pattern(@rule_parameter_set.send "pattern_#{suffix}".to_sym) - td = @rule_parameter_set.send "min_size_#{suffix}".to_sym - td = @rule_parameter_set.send "max_size_#{suffix}".to_sym - -- content_for :sidebar do - ul.actions - li = link_to t('rule_parameter_sets.actions.new'), new_organisation_rule_parameter_set_path, class: 'add' - - - if @rule_parameter_set.persisted? - li = link_to t('rule_parameter_sets.actions.edit'), edit_organisation_rule_parameter_set_path( @rule_parameter_set), class: 'edit' - - - if current_organisation.rule_parameter_sets.size > 1 - li = link_to t('rule_parameter_sets.actions.destroy'), organisation_rule_parameter_set_path( @rule_parameter_set), method: :delete, data: { confirm: t('rule_parameter_sets.actions.destroy_confirm') }, class: 'remove' diff --git a/config/breadcrumbs.rb b/config/breadcrumbs.rb index 0cabf9c6b..4ef16059f 100644 --- a/config/breadcrumbs.rb +++ b/config/breadcrumbs.rb @@ -3,7 +3,7 @@ crumb :root do end crumb :workbench do |workbench| - link breadcrumb_name(workbench), workbench_path(workbench) + link workbench.name, workbench_path(workbench) end crumb :referential do |referential| diff --git a/config/initializers/apartment.rb b/config/initializers/apartment.rb index 1c951317a..87bca0b45 100644 --- a/config/initializers/apartment.rb +++ b/config/initializers/apartment.rb @@ -24,7 +24,6 @@ Apartment.configure do |config| 'Organisation', 'User', 'Api::V1::ApiKey', - 'RuleParameterSet', 'StopAreaReferential', 'StopAreaReferentialMembership', 'StopAreaReferentialSync', diff --git a/config/locales/compliance_check_blocks.en.yml b/config/locales/compliance_check_blocks.en.yml new file mode 100644 index 000000000..a20fb483e --- /dev/null +++ b/config/locales/compliance_check_blocks.en.yml @@ -0,0 +1,8 @@ +en: + activerecord: + models: + compliance_check_block: + zero: Control blocks + one: Control block + other: Control blocks + diff --git a/config/locales/compliance_check_blocks.fr.yml b/config/locales/compliance_check_blocks.fr.yml new file mode 100644 index 000000000..3d385aff6 --- /dev/null +++ b/config/locales/compliance_check_blocks.fr.yml @@ -0,0 +1,7 @@ +fr: + activerecord: + models: + compliance_check_block: + zero: "Groupe de contrôle" + one: "Groupe de contrôle" + other: "Groupes de contrôles" diff --git a/config/locales/compliance_check_sets.en.yml b/config/locales/compliance_check_sets.en.yml index 89c142a49..5aa6f9740 100644 --- a/config/locales/compliance_check_sets.en.yml +++ b/config/locales/compliance_check_sets.en.yml @@ -1,9 +1,5 @@ en: compliance_check_sets: - index: - title: Control reports - new: Creating a Control Report - edit: Update a Control Report actions: new: Add a control report edit: Edit a control report @@ -12,12 +8,25 @@ en: filters: name: Specify a control report name... error_period_filter: End date must be greater than or equal to begin date + index: + title: Compliance control set + new: New compliance control set + new_control: Creating a Control + select_types: Control Type Selection + edit: Edit compliance control set search_no_results: No control reports match your search + executed: + title: Executed control report %{name} activerecord: - attributes: - compliance_check_set: - ref: réf - creation_date: Created at - associated_object: Associated object - assigned_to: Assigned to - compliance_control_set: Compliance control set + attributes: + compliance_check_set: + ref: ref + creation_date: Created at + associated_object: Associated object + assigned_to: Assigned to + compliance_control_set: Compliance control set + name: Name + models: + compliance_check_block: + one: compliance_control_set + other: compliance_control_sets diff --git a/config/locales/compliance_check_sets.fr.yml b/config/locales/compliance_check_sets.fr.yml index 8c21f33fd..8ad5af904 100644 --- a/config/locales/compliance_check_sets.fr.yml +++ b/config/locales/compliance_check_sets.fr.yml @@ -1,9 +1,5 @@ fr: compliance_check_sets: - index: - title: Rapports de contrôle - new: Création d'un rapport de contrôle - edit: Édition d'un rapport de contrôle actions: new: Ajouter edit: Editer @@ -12,12 +8,22 @@ fr: filters: name: Indiquez un nom d'un objet associé... error_period_filter: La date de fin doit être supérieure ou égale à la date de début0 + index: + title: "Liste des jeux de contrôles" search_no_results: Aucun rapport de contrôle ne correspond à votre recherche + executed: + title: Jeu de contrôles exécutés %{name} activerecord: - attributes: - compliance_check_set: - ref: réf - creation_date: Date et heure de création - associated_object: Objet associé - assigned_to: Affectation - compliance_control_set: jeu de contrôle + attributes: + compliance_check_set: + ref: réf + creation_date: Date et heure de création + associated_object: Objet associé + assigned_to: Affectation + compliance_control_set: jeu de contrôle + name: Nom + models: + compliance_check_block: + zero: "Groupe de contrôle" + one: "Groupe de contrôle" + other: "Groupes de contrôles" diff --git a/config/locales/compliance_checks.en.yml b/config/locales/compliance_checks.en.yml index 7f3e317be..177c87852 100644 --- a/config/locales/compliance_checks.en.yml +++ b/config/locales/compliance_checks.en.yml @@ -1,2 +1,10 @@ en: + activerecord: + attributes: + compliance_check: + code: Code compliance_checks: + filters: + subclass: Object + criticity: Severity + name: Name diff --git a/config/locales/compliance_checks.fr.yml b/config/locales/compliance_checks.fr.yml index 421574cbd..d11d37003 100644 --- a/config/locales/compliance_checks.fr.yml +++ b/config/locales/compliance_checks.fr.yml @@ -1,3 +1,14 @@ fr: + activerecord: + attributes: + compliance_check: + code: Code + name: Nom + criticity: Criticité + comment: Commentaire compliance_checks: + filters: + subclass: Objet + criticity: Criticité + name: Nom diff --git a/config/locales/import_tasks.en.yml b/config/locales/import_tasks.en.yml index ad633e872..34f7e6998 100644 --- a/config/locales/import_tasks.en.yml +++ b/config/locales/import_tasks.en.yml @@ -30,7 +30,6 @@ en: no_save: "No save" resources: "File to import" 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" max_distance_for_connection_link: "Max distance for connection link" diff --git a/config/locales/import_tasks.fr.yml b/config/locales/import_tasks.fr.yml index 13e796520..002ca03cb 100644 --- a/config/locales/import_tasks.fr.yml +++ b/config/locales/import_tasks.fr.yml @@ -30,7 +30,6 @@ fr: no_save: "Pas de sauvegarde" resources: "Fichier à importer" 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" max_distance_for_connection_link: "Distance max pour créer les correspondances" diff --git a/config/locales/imports.en.yml b/config/locales/imports.en.yml index 10434dd19..97574007c 100644 --- a/config/locales/imports.en.yml +++ b/config/locales/imports.en.yml @@ -19,7 +19,6 @@ en: show: report: "Report" imported_file: "Original file" - rule_parameter_set: "Rule parameter set" compliance_check: "Validation report" compliance_check_of: "Validation of import: " import_of_validation: "Import of the validation" @@ -69,7 +68,6 @@ en: creator: "Creator" 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" max_distance_for_commercial: "Max distance for commercial stop" max_distance_for_connection_link: "Max distance for connection link" diff --git a/config/locales/imports.fr.yml b/config/locales/imports.fr.yml index 099488a6b..59107cccb 100644 --- a/config/locales/imports.fr.yml +++ b/config/locales/imports.fr.yml @@ -19,7 +19,6 @@ fr: show: report: "Rapport" imported_file: "Fichier source" - rule_parameter_set: "Jeu de paramètres" compliance_check: "Test de conformité" compliance_check_of: "Validation de l'import : " import_of_validation: "L'import de la validation" @@ -69,7 +68,6 @@ fr: creator: "Opérateur" no_save: "Pas de sauvegarde" 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" max_distance_for_connection_link: "Distance max pour créer les correspondances" diff --git a/config/locales/organisations.en.yml b/config/locales/organisations.en.yml index a64920daf..cade312e1 100644 --- a/config/locales/organisations.en.yml +++ b/config/locales/organisations.en.yml @@ -8,7 +8,6 @@ en: key_not_registered: "No key registered" show: users: "Users" - rule_parameter_sets: "Rule parameter sets" activerecord: models: organisation: diff --git a/config/locales/organisations.fr.yml b/config/locales/organisations.fr.yml index 50cb9f3be..756615285 100644 --- a/config/locales/organisations.fr.yml +++ b/config/locales/organisations.fr.yml @@ -8,7 +8,6 @@ fr: key_not_registered: "Pas de clé" show: users: "Utilisateurs" - rule_parameter_sets: "Jeux de paramètres" activerecord: models: organisation: diff --git a/config/locales/referentials.en.yml b/config/locales/referentials.en.yml index a2c6fcf59..8420e9539 100644 --- a/config/locales/referentials.en.yml +++ b/config/locales/referentials.en.yml @@ -86,7 +86,6 @@ en: 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" diff --git a/config/locales/referentials.fr.yml b/config/locales/referentials.fr.yml index e132c959d..ec7ed776d 100644 --- a/config/locales/referentials.fr.yml +++ b/config/locales/referentials.fr.yml @@ -86,7 +86,6 @@ fr: imports: "Imports" exports: "Exports" compliance_checks: "Validations" - rule_parameter_sets: "Jeux de paramètres" data_format_restrictions: "Format d'export privilégié" data_format: "Format d'export privilégié" timebands: "Créneaux horaires" diff --git a/config/locales/rule_parameter_sets.en.yml b/config/locales/rule_parameter_sets.en.yml deleted file mode 100644 index 814e97f1d..000000000 --- a/config/locales/rule_parameter_sets.en.yml +++ /dev/null @@ -1,78 +0,0 @@ -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.fr.yml b/config/locales/rule_parameter_sets.fr.yml deleted file mode 100644 index fd5d75938..000000000 --- a/config/locales/rule_parameter_sets.fr.yml +++ /dev/null @@ -1,78 +0,0 @@ -fr: - rule_parameter_sets: - actions: - new: "Ajouter un jeu de paramètres" - edit: "Editer ce jeu de paramètres" - index: "Jeux de paramètres" - destroy: "Supprimer ce jeu de paramètres" - destroy_confirm: "Etes vous sûr de supprimer ce jeu de paramètres ?" - new: - title: "Ajouter un jeu de paramètres" - form: - add_mode_parameter_set: "Ajouter les paramètres spécifiques à un mode" - edit: - title: "Editer le jeu de paramètres %{rule_parameter_set}" - destroy: - last_rps_protected: "Suppresion impossible. L'espace de données doit compter au minimum un jeu de paramètres." - show: - title: "Jeu de paramètres %{rule_parameter_set}" - max_distance: "Distance maximum entre : " - min_distance: "Distance minimum entre : " - walk_speed: "Vitesse de marche maximum d'un voyageur : " - inter_stop_area_distance_min: "2 arrêts n'ayant pas le même parent" - parent_stop_area_distance_max: "un arrêt et son parent" - inter_access_point_distance_min: "2 accès de noms différents pour un même arrêt" - inter_connection_link_distance_max: "les arrêts en correspondance" - walk_default_speed_max: "ordinaire" - walk_occasional_traveller_speed_max: "occasionnel" - walk_frequent_traveller_speed_max: "habituel" - walk_mobility_restricted_traveller_speed_max: "à mobilité réduite" - inter_access_link_distance_max: "liaison accès - arrêt" - facility_stop_area_distance_max: "un arrêt et un équipement" - inter_stop_duration_max: "Durée maximum de stationnement à un arrêt" - rule_parameter_by_mode: "Jeu de paramètres pour un mode de transport" - modes_allowed: " (uniquement pour les modes autorisés)" - index: - title: "Jeux de paramètres" - labels: - columns_restrictions: "Contôles sur les attributs des objets du modèle" - attribute: "attribut" - free_char: "libre" - num_char: "numérique" - alpha_char: "alphabétique" - lower_char: "minuscule" - upper_char: "majuscule" - activerecord: - models: - rule_parameter_set: "Jeu de paramètres pour le contrôle de qualité des données" - attributes: - rule_parameter_set: - name: "Nom" - inter_stop_area_distance_min: "Distance minimum entre 2 arrêts n'ayant pas le même parent" - parent_stop_area_distance_max: "Distance maximum entre un arrêt et son parent" - stop_areas_area: "Délimitation géographique des arrêts" - inter_access_point_distance_min: "Distance minimum entre 2 accès de noms différents pour un même arrêt" - inter_connection_link_distance_max: "Distance maximum entre les arrêts en correspondance" - walk_default_speed_max: "Vitesse de marche maximum pour un voyageur ordinaire" - walk_occasional_traveller_speed_max: "Vitesse de marche maximum pour un voyageur occasionnel" - walk_frequent_traveller_speed_max: "Vitesse de marche maximum pour un voyageur habituel" - walk_mobility_restricted_traveller_speed_max: "Vitesse de marche maximum pour un voyageur à mobilité réduite" - inter_access_link_distance_max: "Distance maximum d'un liaison accès - arrêt" - inter_stop_duration_max: "Durée maximum entre les horaires d'arrivée et de départ à un arrêt" - facility_stop_area_distance_max: "Distance maximum entre un arrêt et un équipement" - inter_stop_area_distance_min: "Distance minimum entre 2 arrêts" - inter_stop_area_distance_max: "Distance maximum entre 2 arrêts" - speed_min: "Vitesse minimum" - speed_max: "Vitesse maximum" - inter_stop_duration_variation_max: "Ecart maximum de durée entre 2 arrêts successifs pour les différentes courses" - check_lines_in_groups: "Contrôler que chaque ligne appartient à un et un seul groupe de lignes" - check_line_routes: "Contrôler que chaque ligne a une séquence d'arrêt ou un couple A/R de séquences d'arrêts" - check_stop_parent: "Contrôler que chaque arrêt physique est rattaché à un arrêt commercial" - check_connection_link_on_physical: "Contrôler que les correspondances ne relient que des arrêts physiques" - check_allowed_transport_modes: "Contrôler les modes de transport des lignes et des courses" - allowed_transport: "Autorisé" - attribute: "attribut" - unique: "unicité" - string_type: "caractères autorisés" - min_size: "taille ou valeur minimale" - max_size: "taille ou valeur maximale" diff --git a/config/locales/validation_tasks.en.yml b/config/locales/validation_tasks.en.yml index 1b142e992..ebccae383 100644 --- a/config/locales/validation_tasks.en.yml +++ b/config/locales/validation_tasks.en.yml @@ -96,7 +96,6 @@ en: 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" diff --git a/config/locales/validation_tasks.fr.yml b/config/locales/validation_tasks.fr.yml index adbd9c99f..286807edd 100644 --- a/config/locales/validation_tasks.fr.yml +++ b/config/locales/validation_tasks.fr.yml @@ -96,7 +96,6 @@ fr: status: "Status" no_save: "Pas de sauvegarde" references_type: "Sous ensemble" - 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" max_distance_for_connection_link: "Distance max pour créer les correspondances" diff --git a/config/locales/validations.en.yml b/config/locales/validations.en.yml index 5bac62ff3..aa63c2551 100644 --- a/config/locales/validations.en.yml +++ b/config/locales/validations.en.yml @@ -101,7 +101,6 @@ en: 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" diff --git a/config/locales/validations.fr.yml b/config/locales/validations.fr.yml index dc459bee0..d1c1355db 100644 --- a/config/locales/validations.fr.yml +++ b/config/locales/validations.fr.yml @@ -101,7 +101,6 @@ fr: status: "Status" no_save: "Pas de sauvegarde" references_type: "Sous ensemble" - 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" max_distance_for_connection_link: "Distance max pour créer les correspondances" diff --git a/config/routes.rb b/config/routes.rb index 27db66c2c..8ea8168bf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,7 @@ ChouetteIhm::Application.routes.draw do end end resources :compliance_check_sets, only: [:index, :show] do + get :executed, on: :member resources :compliance_checks, only: [:show] end end @@ -71,7 +72,6 @@ ChouetteIhm::Application.routes.draw do resource :organisation, :only => [:show, :edit, :update] do resources :users - resources :rule_parameter_sets end resources :api_keys, :only => [:edit, :update, :new, :create, :destroy] diff --git a/db/migrate/20150218175300_set_organisation_id_to_rps.rb b/db/migrate/20150218175300_set_organisation_id_to_rps.rb deleted file mode 100644 index 024f5938e..000000000 --- a/db/migrate/20150218175300_set_organisation_id_to_rps.rb +++ /dev/null @@ -1,13 +0,0 @@ -class SetOrganisationIdToRps < ActiveRecord::Migration - def up - RuleParameterSet.where(organisation_id: nil).update_all "name = concat(name, ' ', id)" - - # RuleParameterSet.joins(...).update_all("organisation_id = referentials.organisation_id") - # fails (see https://github.com/rails/arel/pull/294) - execute "UPDATE rule_parameter_sets SET organisation_id = referentials.organisation_id FROM referentials WHERE referentials.id = rule_parameter_sets.referential_id;" - end - - def down - RuleParameterSet.update_all organisation_id: nil - end -end diff --git a/db/migrate/20150219175300_insert_default_organisation.rb b/db/migrate/20150219175300_insert_default_organisation.rb index c8e97b562..2734893f5 100644 --- a/db/migrate/20150219175300_insert_default_organisation.rb +++ b/db/migrate/20150219175300_insert_default_organisation.rb @@ -1,10 +1,8 @@ class InsertDefaultOrganisation < ActiveRecord::Migration class Organisation < ActiveRecord::Base attr_accessor :name - - has_many :rule_parameter_sets, :dependent => :destroy end - + def up organisation = Organisation.find_or_create_by!(:name => "Chouette") Referential.where( :organisation_id => nil).each do |r| @@ -13,10 +11,6 @@ class InsertDefaultOrganisation < ActiveRecord::Migration User.where( :organisation_id => nil).each do |r| r.update_attributes :organisation_id => organisation.id end - Organisation.all.each do |organisation| - RuleParameterSet.default_for_all_modes( organisation).save if organisation.rule_parameter_sets.empty? - end - end def down diff --git a/db/migrate/20171114102438_drop_table_rule_parameter_sets.rb b/db/migrate/20171114102438_drop_table_rule_parameter_sets.rb new file mode 100644 index 000000000..55dfd32df --- /dev/null +++ b/db/migrate/20171114102438_drop_table_rule_parameter_sets.rb @@ -0,0 +1,5 @@ +class DropTableRuleParameterSets < ActiveRecord::Migration + def change + drop_table :rule_parameter_sets + end +end diff --git a/db/schema.rb b/db/schema.rb index a992eb32b..21aa73cd8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171113101005) do +ActiveRecord::Schema.define(version: 20171114102438) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -682,14 +682,6 @@ ActiveRecord::Schema.define(version: 20171113101005) do t.integer "line_id", limit: 8 end - create_table "rule_parameter_sets", id: :bigserial, force: :cascade do |t| - t.text "parameters" - t.string "name" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "organisation_id", limit: 8 - end - create_table "stop_area_referential_memberships", id: :bigserial, force: :cascade do |t| t.integer "organisation_id", limit: 8 t.integer "stop_area_referential_id", limit: 8 diff --git a/lib/stif/netex_file.rb b/lib/stif/netex_file.rb index 424663c1c..a977c1ad3 100644 --- a/lib/stif/netex_file.rb +++ b/lib/stif/netex_file.rb @@ -52,8 +52,6 @@ module STIF end end - LINE_FORMAT = /^offre_.*\.xml$/ - def add_offer_file(file_name) if file_name =~ /^offre_([^_]*)_/ line_refs << $1 diff --git a/spec/controllers/compliance_check_sets_controller_spec.rb b/spec/controllers/compliance_check_sets_controller_spec.rb index 804b0a658..3ddb1dad1 100644 --- a/spec/controllers/compliance_check_sets_controller_spec.rb +++ b/spec/controllers/compliance_check_sets_controller_spec.rb @@ -5,9 +5,9 @@ RSpec.describe ComplianceCheckSetsController, type: :controller do let(:compliance_check_set) { create :compliance_check_set } - describe "GET show" do + describe "GET executed" do it 'should be successful' do - get :show, workbench_id: compliance_check_set.workbench.id, id: compliance_check_set.id + get :executed, workbench_id: compliance_check_set.workbench.id, id: compliance_check_set.id expect(response).to be_success end end diff --git a/spec/controllers/rule_parameter_sets_controller_spec.rb b/spec/controllers/rule_parameter_sets_controller_spec.rb deleted file mode 100644 index 0f57855b7..000000000 --- a/spec/controllers/rule_parameter_sets_controller_spec.rb +++ /dev/null @@ -1,36 +0,0 @@ -# require 'spec_helper' - -# describe RuleParameterSetsController, :type => :controller do -# login_user -# let(:mode){"air"} - - # shared_examples_for "organisation dependant" do - # it "assigns rule_parameter_set.organisation as current organisation" do - # expect(assigns[:organisation]).to eq(assigns[:organisation].rule_parameter_sets[0].organisation) - # end - # end - - # describe "GET /index" do - # before(:each) do - # get :index - # end - # it "should assign rule_parameter_sets to organisation rule_parameter_sets" do - # expect(assigns[:rule_parameter_sets].size).to eq(assigns[:rule_parameter_sets][0].organisation.rule_parameter_sets.size) - # assigns[:rule_parameter_sets].each do |rps| - # expect(rps.organisation.id).to eq(assigns[:rule_parameter_sets][0].organisation.id) - # end - # end - # end - - # describe "GET /new" do - # before(:each) do - # get :new - # end - # it_behaves_like "organisation dependant" - # it "should assign rule_parameter_set with default params" do - # RuleParameterSet.default_params.each do |k,v| - # expect(assigns[:rule_parameter_set].send( k )).to eq(v) - # end - # end - # end -# end diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb new file mode 100644 index 000000000..a7fe0a162 --- /dev/null +++ b/spec/db/schema_spec.rb @@ -0,0 +1,49 @@ +RSpec.describe ActiveRecord::Schema do + it "uses type `bigint` for primary and foreign keys" do + expect('db/schema.rb').to use_bigint_keys + end +end + + +RSpec::Matchers.define :use_bigint_keys do + match do |filename| + @original = "" + @expected = "" + + File.open(filename, 'r') do |f| + f.each_line do |line| + expected_line = line + + # Primary key + if line =~ /create_table\s/ && + !(line =~ /id: \s+ (?: :bigserial | false)/x) + expected_line = line.sub(/(create_table\s"\w+",\s)/, '\1id: :bigserial, ') + end + + # Foreign key + if line =~ /t\.integer\s+"\w+_id"/ && + !(line =~ /limit: 8/) + expected_line = line.sub(/(t.integer\s+"\w+")/, '\1, limit: 8') + end + + @original += line + @expected += expected_line + end + end + + @original == @expected + end + + failure_message do |filename| + <<-EOS +expected #{filename.inspect} to use bigint keys +Diff: #{diff} + EOS + end + + def diff + RSpec::Support::Differ.new( + color: RSpec::Matchers.configuration.color? + ).diff_as_string(@original, @expected) + end +end diff --git a/spec/factories/compliance_control_blocks.rb b/spec/factories/compliance_control_blocks.rb index 4785d8419..94773d4b3 100644 --- a/spec/factories/compliance_control_blocks.rb +++ b/spec/factories/compliance_control_blocks.rb @@ -1,7 +1,8 @@ FactoryGirl.define do factory :compliance_control_block do sequence(:name) { |n| "Compliance control block #{n}" } - transport_mode "air" + transport_mode StifTransportModeEnumerations.transport_modes.first + transport_submode StifTransportSubmodeEnumerations.transport_submodes.first association :compliance_control_set end end diff --git a/spec/factories/netex_imports.rb b/spec/factories/netex_imports.rb index 9e9d836e4..b59267a0a 100644 --- a/spec/factories/netex_imports.rb +++ b/spec/factories/netex_imports.rb @@ -1,5 +1,7 @@ FactoryGirl.define do factory :netex_import, class: NetexImport, parent: :import do file { File.open(Rails.root.join('spec', 'fixtures', 'OFFRE_TRANSDEV_2017030112251.zip')) } + association :parent, factory: :workbench_import + end end diff --git a/spec/factories/rule_parameter_sets.rb b/spec/factories/rule_parameter_sets.rb deleted file mode 100644 index e20fff8ce..000000000 --- a/spec/factories/rule_parameter_sets.rb +++ /dev/null @@ -1,9 +0,0 @@ -FactoryGirl.define do - factory :rule_parameter_set do - sequence(:name) { |n| "Test #{n}" } - association :organisation - after(:create) do |rsp| - rsp.parameters = RuleParameterSet.default_for_all_modes( rsp.organisation).parameters - end - end -end diff --git a/spec/features/compliance_check_sets_spec.rb b/spec/features/compliance_check_sets_spec.rb new file mode 100644 index 000000000..7ba64b6b8 --- /dev/null +++ b/spec/features/compliance_check_sets_spec.rb @@ -0,0 +1,110 @@ +require 'rails_helper' + +RSpec.describe "ComplianceCheckSets", type: :feature do + + include ComplianceCheckSetsHelper + include TransportModeHelper + + login_user + + # We setup a control_set with two blocks and one direct control (meaning that it is not attached to a block) + # Then we add one control to the first block and two controls to the second block + let( :compliance_check_set ){ create :compliance_check_set, name: random_string } + let(:blox){[ + create( :compliance_check_block, + compliance_check_set: compliance_check_set, transport_mode: 'bus', transport_submode: 'demandAndResponseBus'), + create( :compliance_check_block, + compliance_check_set: compliance_check_set, transport_mode: 'rail', transport_submode: 'suburbanRailway') + ]} + let!(:direct_checks){ make_check(nil, times: 2) + make_check(nil, severity: :error) } + let!(:indirect_checks){ blox.flat_map{ |block| make_check(block) } } + let( :all_checks ){ direct_checks + indirect_checks } + + + context 'executed' do + + before do + visit(executed_compliance_check_set_path(compliance_check_set)) + end + + it 'we can see the expected content' do + # Breadcrumbs + expect_breadcrumb_links "Accueil", "Gestion de l'offre", "Liste des jeux de contrôles" + + # Headline + expect( page ).to have_content("Jeu de contrôles exécutés #{compliance_check_set.name}") + + # Information Definition List + expect( page.first('.dl-term') ).to have_content("Nom") + expect( page.first('.dl-def') ).to have_content(compliance_check_set.name) + + # Filters + within( 'form.form-filter' ) do + expect( page ).to have_content("Groupe de contrôle") + expect( page ).to have_content("Objet") + expect( page ).to have_content("Criticité") + end + + # Checks + # Direct Children + within(:xpath, xpath_for_div_of_block) do + direct_checks.each do | direct_check | + expect( page ).to have_content( direct_check.code ) + expect( page ).to have_content( direct_check.name ) + expect( page ).to have_content( direct_check.criticity ) + expect( page ).to have_content( direct_check.comment ) + end + + end + # Indirect Children + compliance_check_set.compliance_check_blocks.each do | block | + within(:xpath, xpath_for_div_of_block(block)) do + block.compliance_checks.each do | check | + expect( page ).to have_content( check.code ) + expect( page ).to have_content( check.name ) + expect( page ).to have_content( check.criticity ) + expect( page ).to have_content( check.comment ) + end + end + end + end + + it 'can filter the results and remove the filter' do + # Filter + check('error') + click_on('Filtrer') + all_checks.each do | check | + if check.criticity == 'error' + expect( page ).to have_content(check.code) + else + expect( page ).not_to have_content(check.code) + end + end + + # Remove filter + click_on('Effacer') + all_checks.each do | check | + expect( page ).to have_content(check.code) + end + + end + end + + def make_check ccblock=nil, times: 1, severity: :warning + times.times.map do + make_one_check ccblock, severity + end + end + + def make_one_check ccblock, severity + create( :compliance_check, + code: random_string, + compliance_check_block: ccblock, + compliance_check_set: compliance_check_set, + criticity: severity) + end + + def xpath_for_div_of_block(block = nil) + %{.//div[@class="col-lg-12"]/h2[contains(text(),"#{transport_mode_text(block)}")]/../../..} + end +end diff --git a/spec/features/compliance_control_sets_spec.rb b/spec/features/compliance_control_sets_spec.rb index 500d4ce6f..bcb989cdc 100644 --- a/spec/features/compliance_control_sets_spec.rb +++ b/spec/features/compliance_control_sets_spec.rb @@ -25,7 +25,18 @@ RSpec.describe "ComplianceControlSets", type: :feature do visit compliance_control_set_path( control_set ) end - it 'we can see the controls inside their blocks' do + it 'we can see the expected content' do + # Breadcrumb + expect_breadcrumb_links "Accueil", "Liste des jeux de contrôles" + + # Headline + expect( page ).to have_content("Consulter le jeu de contrôles #{control_set.name}") + + # Information Definition List + expect( page.first('.dl-term') ).to have_content("Nom") + expect( page.first('.dl-def') ).to have_content(control_set.name) + + # Children controls.each do | control | expect( page ).to have_content(control.code) end @@ -76,7 +87,8 @@ RSpec.describe "ComplianceControlSets", type: :feature do create( :generic_attribute_control_min_max, code: random_string, compliance_control_block: ccblock, - compliance_control_set: control_set) + compliance_control_set: control_set, + criticity: severity) end end diff --git a/spec/models/compliance_check_block_spec.rb b/spec/models/compliance_check_block_spec.rb index a3d98d459..0629a645d 100644 --- a/spec/models/compliance_check_block_spec.rb +++ b/spec/models/compliance_check_block_spec.rb @@ -1,10 +1,17 @@ -require 'rails_helper' - RSpec.describe ComplianceCheckBlock, type: :model do - it 'should have a valid factory' do - expect(FactoryGirl.build(:compliance_check_block)).to be_valid - end it { should belong_to :compliance_check_set } it { should have_many :compliance_checks } + + it { should allow_values(*%w{bus metro rail tram funicular}).for(:transport_mode) } + it { should_not allow_values(*%w{bs mtro ril tramm Funicular}).for(:transport_mode) } + + + it { should allow_values( *%w{ demandAndResponseBus nightBus airportLinkBus highFrequencyBus expressBus + railShuttle suburbanRailway regionalRail interregionalRail }) + .for(:transport_submode) } + + it { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs + Shuttle suburban regioalRail interregion4lRail }) + .for(:transport_submode) } end diff --git a/spec/models/compliance_control_block_spec.rb b/spec/models/compliance_control_block_spec.rb index c7440a5eb..4abe0ed9c 100644 --- a/spec/models/compliance_control_block_spec.rb +++ b/spec/models/compliance_control_block_spec.rb @@ -1,13 +1,20 @@ require 'rails_helper' RSpec.describe ComplianceControlBlock, type: :model do - subject { create(:compliance_control_block) } - - it 'should have a valid factory' do - expect(FactoryGirl.build(:compliance_control_block)).to be_valid - end it { should belong_to :compliance_control_set } it { should have_many(:compliance_controls).dependent(:destroy) } it { should validate_presence_of(:transport_mode) } + + it { should allow_values(*%w{bus metro rail tram funicular}).for(:transport_mode) } + it { should_not allow_values(*%w{bs mtro ril tramm Funicular}).for(:transport_mode) } + + + it { should allow_values( *%w{ demandAndResponseBus nightBus airportLinkBus highFrequencyBus expressBus + railShuttle suburbanRailway regionalRail interregionalRail }) + .for(:transport_submode) } + + it { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs + Shuttle suburban regioalRail interregion4lRail }) + .for(:transport_submode) } end diff --git a/spec/models/import/netex_import_spec.rb b/spec/models/import/netex_import_spec.rb new file mode 100644 index 000000000..8ffeed1f4 --- /dev/null +++ b/spec/models/import/netex_import_spec.rb @@ -0,0 +1,33 @@ +RSpec.describe NetexImport, type: [:model, :with_commit] do + + let( :boiv_iev_uri ){ URI("#{Rails.configuration.iev_url}/boiv_iev/referentials/importer/new?id=#{subject.id}")} + + + before do + allow(Thread).to receive(:new).and_yield + end + + context 'with referential' do + subject{ build( :netex_import, id: random_int ) } + + it 'will trigger the Java API' do + with_stubbed_request(:get, boiv_iev_uri) do |request| + with_commit{ subject.save! } + expect(request).to have_been_requested + end + end + end + + context 'without referential' do + subject { build :netex_import, referential_id: nil } + + it 'its status is forced to aborted and the Java API is not callled' do + with_stubbed_request(:get, boiv_iev_uri) do |request| + with_commit{ subject.save! } + expect(subject.reload.status).to eq('aborted') + expect(request).not_to have_been_requested + end + end + end + +end diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb index 7be05908a..4e8aac3f4 100644 --- a/spec/models/import_spec.rb +++ b/spec/models/import_spec.rb @@ -13,9 +13,9 @@ RSpec.describe Import, type: :model do it { should allow_value('file.zip').for(:file).with_message(I18n.t('activerecord.errors.models.import.attributes.file.wrong_file_extension')) } it { should_not allow_values('file.json', 'file.png', 'file.pdf').for(:file) } - let(:workbench_import) { build_stubbed(:workbench_import) } + let(:workbench_import) {netex_import.parent} let(:workbench_import_with_completed_steps) do - workbench_import = build_stubbed( + build_stubbed( :workbench_import, total_steps: 2, current_step: 2 @@ -23,20 +23,18 @@ RSpec.describe Import, type: :model do end let(:netex_import) do - netex_import = build_stubbed( - :netex_import, - parent: workbench_import + build_stubbed( + :netex_import ) end describe "#destroy" do it "must destroy all child imports" do - workbench_import = create(:workbench_import) - create(:netex_import, parent: workbench_import) + netex_import = create(:netex_import) - workbench_import.destroy + netex_import.parent.destroy - expect(workbench_import).to be_destroyed + expect(netex_import.parent).to be_destroyed expect(NetexImport.count).to eq(0) end diff --git a/spec/models/line_referential_spec.rb b/spec/models/line_referential_spec.rb index ea83c0ebd..46434a7ab 100644 --- a/spec/models/line_referential_spec.rb +++ b/spec/models/line_referential_spec.rb @@ -1,6 +1,4 @@ -require 'spec_helper' - -RSpec.describe LineReferential, :type => :model do +RSpec.describe LineReferential, type: :model do it 'should have a valid factory' do expect(FactoryGirl.build(:line_referential)).to be_valid end @@ -11,9 +9,4 @@ RSpec.describe LineReferential, :type => :model do it { should validate_presence_of(:sync_interval) } it { should validate_presence_of(:objectid_format) } - describe "#transport_modes" do - it 'returns a list of all transport modes' do - expect(FactoryGirl.create(:line_referential).class.transport_modes).to match_array(StifTransportModeEnumerations.transport_modes ) - end - end end diff --git a/spec/models/netex_import_spec.rb b/spec/models/netex_import_spec.rb new file mode 100644 index 000000000..c6051a869 --- /dev/null +++ b/spec/models/netex_import_spec.rb @@ -0,0 +1,39 @@ +RSpec.describe NetexImport, type: :model do + describe "#destroy" do + it "must destroy its associated Referential if ready: false" do + workbench_import = create(:workbench_import) + referential_ready_false = create(:referential, ready: false) + referential_ready_true = create(:referential, ready: true) + create( + :netex_import, + parent: workbench_import, + referential: referential_ready_false + ) + create( + :netex_import, + parent: workbench_import, + referential: referential_ready_true + ) + + workbench_import.destroy + + expect( + Referential.where(id: referential_ready_false.id).exists? + ).to be false + expect( + Referential.where(id: referential_ready_true.id).exists? + ).to be true + end + + it "doesn't try to destroy nil referentials" do + workbench_import = create(:workbench_import) + create( + :netex_import, + parent: workbench_import, + referential: nil + ) + + expect { workbench_import.destroy }.not_to raise_error + end + end +end diff --git a/spec/models/rule_parameter_set_spec.rb b/spec/models/rule_parameter_set_spec.rb deleted file mode 100644 index 71ab0cddd..000000000 --- a/spec/models/rule_parameter_set_spec.rb +++ /dev/null @@ -1,49 +0,0 @@ -# require 'spec_helper' - -# describe RuleParameterSet, :type => :model do - -# describe ".mode_of_mode_attribute" do -# it "should retreive attribute name" do -# expect(subject.class.attribute_of_mode_attribute("dummy1_mode_dummy2")).to eq("dummy1") -# end -# it "should retreive mode" do -# expect(subject.class.mode_of_mode_attribute("dummy1_mode_dummy2")).to eq("dummy2") -# end -# end - -# RuleParameterSet.mode_attribute_prefixes.each do |prefix| -# RuleParameterSet.all_modes.map do |mode| -# "#{prefix}_mode_#{mode}".tap do |attribute| -# describe "##{attribute}=" do -# it "should store value on parameters hash" do -# subject.send( "#{attribute}=".to_sym, 1234) -# expect(subject.send( attribute.to_sym)).to eq(1234) -# expect(subject.parameters["mode_#{mode}"][ prefix]).to eq(1234) -# end -# end -# it { is_expected.to allow_mass_assignment_of attribute.to_sym} -# end -# end -# end - -# RuleParameterSet.general_attributes.each do |attribute| -# describe "##{attribute}=" do -# it "should store value on parameters hash" do -# subject.send( "#{attribute}=".to_sym, 1234) -# expect(subject.send( attribute.to_sym)).to eq(1234) -# expect(subject.parameters[ attribute]).to eq(1234) -# end -# end -# it { is_expected.to allow_mass_assignment_of attribute.to_sym} -# end - -# describe "#referential" do -# it { is_expected.to validate_presence_of(:referential) } -# it { is_expected.to allow_mass_assignment_of :referential_id } -# end - -# describe "#name" do -# it { is_expected.to validate_presence_of(:name) } -# it { is_expected.to allow_mass_assignment_of :name } -# end -# end diff --git a/spec/support/breadcrumb_features.rb b/spec/support/breadcrumb_features.rb new file mode 100644 index 000000000..36bfce19c --- /dev/null +++ b/spec/support/breadcrumb_features.rb @@ -0,0 +1,15 @@ +module BreadcrumbFeatures + def expect_breadcrumb_links *link_names + within('.breadcrumbs') do + all('a').zip( link_names ).each do | link_element, link_content | + within(link_element) do | | + expect(page).to have_content(link_content) + end + end + end + end +end + +RSpec.configure do | conf | + conf.include BreadcrumbFeatures, type: :feature +end diff --git a/spec/support/webmock/helpers.rb b/spec/support/webmock/helpers.rb index fc6c77850..a6506c035 100644 --- a/spec/support/webmock/helpers.rb +++ b/spec/support/webmock/helpers.rb @@ -8,6 +8,11 @@ module Support def make_headers(headers={}, authorization_token:) headers.merge('Authorization' => "Token token=#{authorization_token.inspect}") end + + def with_stubbed_request( method, uri, &blk ) + stub_request(method, uri).tap(&blk) + end + end end end diff --git a/spec/support/with_commit.rb b/spec/support/with_commit.rb new file mode 100644 index 000000000..2b4725f89 --- /dev/null +++ b/spec/support/with_commit.rb @@ -0,0 +1,10 @@ +module WithCommit + def with_commit + yield + subject._run_commit_callbacks + end +end + +RSpec.configure do |conf| + conf.include WithCommit, type: :with_commit +end diff --git a/spec/views/rule_parameter_sets/new.html.erb_spec.rb b/spec/views/rule_parameter_sets/new.html.erb_spec.rb deleted file mode 100644 index 6f44311d5..000000000 --- a/spec/views/rule_parameter_sets/new.html.erb_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'spec_helper' - -describe "/rule_parameter_sets/new", :type => :view do - - assign_organisation - let!(:organisation) { create(:organisation) } - let!(:rule_parameter_set) { assign :rule_parameter_set, build( :rule_parameter_set, :organisation => organisation) } - - describe "form" do - - xit "should render input for name" do - render - expect(rendered).to have_selector("form") do - with_selector "input[type=text][name=?]", rule_parameter_set.name - end - end - xit "should render input div for added_mode_parameter_set" do - render - expect(rendered).to have_selector("form") do - with_selector "#added_mode_parameter_set" - end - end - - end - -end - |
