aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcedricnjanga2017-12-13 21:08:19 +0100
committercedricnjanga2017-12-13 21:08:19 +0100
commitf5681428184d2cdc1dc49b4426da60101c107f35 (patch)
treea42bf08d67f666138fffad366f21c13931eec672
parent7a78e65f6b765cced904c6214c3f48a16ca36261 (diff)
parent3b291a73e977737cb8f6da7fce7f914504426b93 (diff)
downloadchouette-core-f5681428184d2cdc1dc49b4426da60101c107f35.tar.bz2
Merge branch 'master' into staging
-rw-r--r--app/controllers/lines_controller.rb2
-rw-r--r--app/helpers/application_helper.rb10
-rw-r--r--app/javascript/vehicle_journeys/actions/index.js6
-rw-r--r--app/javascript/vehicle_journeys/components/VehicleJourney.js4
-rw-r--r--app/javascript/vehicle_journeys/components/tools/CreateModal.js2
-rw-r--r--app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js1
-rw-r--r--app/javascript/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js4
-rw-r--r--app/javascript/vehicle_journeys/components/tools/select2s/CompanySelect2.js4
-rw-r--r--app/javascript/vehicle_journeys/components/tools/select2s/MissionSelect2.js4
-rw-r--r--app/javascript/vehicle_journeys/components/tools/select2s/TimetableSelect2.js2
-rw-r--r--app/javascript/vehicle_journeys/components/tools/select2s/VJSelect2.js2
-rw-r--r--app/javascript/vehicle_journeys/reducers/vehicleJourneys.js1
-rw-r--r--app/models/chouette/line.rb2
-rw-r--r--app/models/compliance_control_block.rb4
-rw-r--r--app/policies/referential_policy.rb2
-rw-r--r--app/views/compliance_control_sets/show.html.slim5
-rw-r--r--app/views/lines/_form.html.slim1
-rw-r--r--app/views/lines/show.html.slim2
-rw-r--r--config/breadcrumbs.rb4
-rw-r--r--config/initializers/ransack.rb17
-rw-r--r--config/locales/compliance_control_blocks.en.yml2
-rw-r--r--config/locales/compliance_control_blocks.fr.yml2
-rw-r--r--config/locales/lines.en.yml1
-rw-r--r--config/locales/lines.fr.yml1
-rw-r--r--spec/decorators/referential_decorator_spec.rb3
-rw-r--r--spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js1
-rw-r--r--spec/lib/compliance_control_set_cloner_spec.rb2
27 files changed, 62 insertions, 29 deletions
diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb
index 2f0ef1542..571c73f4a 100644
--- a/app/controllers/lines_controller.rb
+++ b/app/controllers/lines_controller.rb
@@ -135,6 +135,8 @@ class LinesController < ChouetteController
:color,
:text_color,
:stable_id,
+ :transport_submode,
+ :secondary_company_ids => [],
footnotes_attributes: [:code, :label, :_destroy, :id]
)
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index d2cdaaa20..124604cd9 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -3,12 +3,20 @@ module ApplicationHelper
include NewapplicationHelper
+ def array_to_html_list items
+ content_tag :ul do
+ items.each do |item|
+ concat content_tag :li, item
+ end
+ end
+ end
+
def page_header_title(object)
# Unwrap from decorator, we want to know the object model name
object = object.object if object.try(:object)
local = "#{object.model_name.name.underscore.pluralize}.#{params[:action]}.title"
if object.try(:name)
- t(local, name: object.name)
+ t(local, name: object.name || object.id)
else
t(local)
end
diff --git a/app/javascript/vehicle_journeys/actions/index.js b/app/javascript/vehicle_journeys/actions/index.js
index ddb54d615..ce4b9209d 100644
--- a/app/javascript/vehicle_journeys/actions/index.js
+++ b/app/javascript/vehicle_journeys/actions/index.js
@@ -162,7 +162,7 @@ const actions = {
resetValidation: (target) => {
$(target).parent().removeClass('has-error').children('.help-block').remove()
},
- validateFields : (fields) => {
+ validateFields : (...fields) => {
const test = []
Object.keys(fields).map(function(key) {
@@ -457,10 +457,6 @@ const actions = {
minute: actions.simplePad(newArrivalDT.getUTCMinutes())
}
}
- },
- escapeWildcardCharacters(search) {
- let newSearch = search.replace(/^_/, "\\_")
- return newSearch.replace(/^%/, "\\%")
}
}
diff --git a/app/javascript/vehicle_journeys/components/VehicleJourney.js b/app/javascript/vehicle_journeys/components/VehicleJourney.js
index 8fb4b8a7e..929cbc5c4 100644
--- a/app/javascript/vehicle_journeys/components/VehicleJourney.js
+++ b/app/javascript/vehicle_journeys/components/VehicleJourney.js
@@ -49,8 +49,8 @@ export default class VehicleJourney extends Component {
return (
<div className={'t2e-item' + (this.props.value.deletable ? ' disabled' : '') + (this.props.value.errors ? ' has-error': '')}>
<div className='th'>
- <div className='strong mb-xs'>{this.props.value.objectid ? this.props.value.short_id : '-'}</div>
- <div>{this.props.value.journey_pattern.short_id}</div>
+ <div className='strong mb-xs'>{this.props.value.short_id || '-'}</div>
+ <div>{this.props.value.journey_pattern.short_id || '-'}</div>
<div>
{time_tables.slice(0,3).map((tt, i)=>
<span key={i} className='vj_tt'>{this.timeTableURL(tt)}</span>
diff --git a/app/javascript/vehicle_journeys/components/tools/CreateModal.js b/app/javascript/vehicle_journeys/components/tools/CreateModal.js
index 2bffebdf6..33873219c 100644
--- a/app/javascript/vehicle_journeys/components/tools/CreateModal.js
+++ b/app/javascript/vehicle_journeys/components/tools/CreateModal.js
@@ -9,7 +9,7 @@ export default class CreateModal extends Component {
}
handleSubmit() {
- if(actions.validateFields(this.refs) == true && this.props.modal.modalProps.selectedJPModal) {
+ if (actions.validateFields(...this.refs, $('.vjCreateSelectJP')[0]) && this.props.modal.modalProps.selectedJPModal) {
this.props.onAddVehicleJourney(this.refs, this.props.modal.modalProps.selectedJPModal, this.props.stopPointsList, this.props.modal.modalProps.selectedCompany)
this.props.onModalClose()
$('#NewVehicleJourneyModal').modal('hide')
diff --git a/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js b/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js
index 7d91896eb..f8d6add03 100644
--- a/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js
+++ b/app/javascript/vehicle_journeys/components/tools/EditVehicleJourney.js
@@ -97,6 +97,7 @@ export default class EditVehicleJourney extends Component {
<div className='form-group'>
<label className='control-label'>Transporteur</label>
<CompanySelect2
+ editModal={this.props.modal.type == "edit"}
editMode={this.props.editMode}
company = {this.props.modal.modalProps.vehicleJourney.company}
onSelect2Company = {(e) => this.props.onSelect2Company(e)}
diff --git a/app/javascript/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js b/app/javascript/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js
index fef3cdcc9..6629135dd 100644
--- a/app/javascript/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js
+++ b/app/javascript/vehicle_journeys/components/tools/TimetablesEditVehicleJourney.js
@@ -29,7 +29,7 @@ export default class TimetablesEditVehicleJourney extends Component {
<li className='st_action'>
<button
type='button'
- disabled={(actions.getSelected(this.props.vehicleJourneys).length != 1 || this.props.disabled)}
+ disabled={(actions.getSelected(this.props.vehicleJourneys).length < 1 || this.props.disabled)}
data-toggle='modal'
data-target='#CalendarsEditVehicleJourneyModal'
onClick={() => this.props.onOpenCalendarsEditModal(actions.getSelected(this.props.vehicleJourneys))}
@@ -56,7 +56,7 @@ export default class TimetablesEditVehicleJourney extends Component {
<div className='wrapper'>
<div>
<div className='form-group'>
- <label className='control-label'>Calendriers associés</label>
+ <label className='control-label'>{this.props.modal.modalProps.timetables.length == 0 ? "Aucun calendrier associé" : "Calendriers associés"}</label>
</div>
</div>
<div></div>
diff --git a/app/javascript/vehicle_journeys/components/tools/select2s/CompanySelect2.js b/app/javascript/vehicle_journeys/components/tools/select2s/CompanySelect2.js
index 0697e9141..79ba8f094 100644
--- a/app/javascript/vehicle_journeys/components/tools/select2s/CompanySelect2.js
+++ b/app/javascript/vehicle_journeys/components/tools/select2s/CompanySelect2.js
@@ -21,7 +21,7 @@ export default class BSelect4 extends Component {
value={(this.props.company) ? this.props.company.name : undefined}
onSelect={(e) => this.props.onSelect2Company(e) }
onUnselect={() => this.props.onUnselect2Company()}
- disabled={!this.props.editMode}
+ disabled={!this.props.editMode && this.props.editModal}
multiple={false}
ref='company_id'
options={{
@@ -36,7 +36,7 @@ export default class BSelect4 extends Component {
delay: '500',
data: function(params) {
return {
- q: { name_cont: actions.escapeWildcardCharacters(params.term)},
+ q: { name_cont: params.term},
};
},
processResults: function(data, params) {
diff --git a/app/javascript/vehicle_journeys/components/tools/select2s/MissionSelect2.js b/app/javascript/vehicle_journeys/components/tools/select2s/MissionSelect2.js
index 5b4ae564c..fa847886c 100644
--- a/app/javascript/vehicle_journeys/components/tools/select2s/MissionSelect2.js
+++ b/app/javascript/vehicle_journeys/components/tools/select2s/MissionSelect2.js
@@ -21,6 +21,8 @@ export default class BSelect4 extends Component {
onSelect={(e) => this.props.onSelect2JourneyPattern(e)}
multiple={false}
ref='journey_pattern_id'
+ className={!this.props.isFilter ? "vjCreateSelectJP" : null}
+ required={!this.props.isFilter}
options={{
allowClear: false,
theme: 'bootstrap',
@@ -33,7 +35,7 @@ export default class BSelect4 extends Component {
delay: '500',
data: function(params) {
return {
- q: { published_name_or_objectid_or_registration_number_cont: actions.escapeWildcardCharacters(params.term)},
+ q: { published_name_or_objectid_or_registration_number_cont: params.term},
};
},
processResults: function(data, params) {
diff --git a/app/javascript/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/javascript/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
index a90a9f7b8..19c183839 100644
--- a/app/javascript/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
+++ b/app/javascript/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
@@ -34,7 +34,7 @@ export default class BSelect4 extends Component {
data: function(params) {
return {
q: {
- comment_or_objectid_cont_any: actions.escapeWildcardCharacters(params.term)
+ comment_or_objectid_cont_any: params.term
}
};
},
diff --git a/app/javascript/vehicle_journeys/components/tools/select2s/VJSelect2.js b/app/javascript/vehicle_journeys/components/tools/select2s/VJSelect2.js
index 37628fce0..b063abeca 100644
--- a/app/javascript/vehicle_journeys/components/tools/select2s/VJSelect2.js
+++ b/app/javascript/vehicle_journeys/components/tools/select2s/VJSelect2.js
@@ -33,7 +33,7 @@ export default class BSelect4b extends Component {
delay: '500',
data: function(params) {
return {
- q: { objectid_cont: actions.escapeWildcardCharacters(params.term)},
+ q: { objectid_cont: params.term},
};
},
processResults: function(data, params) {
diff --git a/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js b/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js
index 775fefdca..136e1b41a 100644
--- a/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js
+++ b/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js
@@ -38,6 +38,7 @@ const vehicleJourney= (state = {}, action, keep) => {
published_journey_name: action.data.published_journey_name.value,
published_journey_identifier: action.data.published_journey_identifier.value,
objectid: '',
+ short_id: '',
footnotes: [],
time_tables: [],
vehicle_journey_at_stops: pristineVjasList,
diff --git a/app/models/chouette/line.rb b/app/models/chouette/line.rb
index 784e3f5b9..93d4f5e8b 100644
--- a/app/models/chouette/line.rb
+++ b/app/models/chouette/line.rb
@@ -72,7 +72,7 @@ module Chouette
end
def display_name
- [self.get_objectid.local_id, number, name, company.try(:name)].compact.join(' - ')
+ [self.get_objectid.short_id, number, name, company.try(:name)].compact.join(' - ')
end
def companies
diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb
index cfcdfd1a6..e27f85ae0 100644
--- a/app/models/compliance_control_block.rb
+++ b/app/models/compliance_control_block.rb
@@ -12,4 +12,8 @@ class ComplianceControlBlock < ActiveRecord::Base
validates :transport_mode, presence: true
validates :compliance_control_set, presence: true
+ def name
+ ApplicationController.helpers.transport_mode_text(self)
+ end
+
end
diff --git a/app/policies/referential_policy.rb b/app/policies/referential_policy.rb
index bc8a3e24b..253917509 100644
--- a/app/policies/referential_policy.rb
+++ b/app/policies/referential_policy.rb
@@ -22,7 +22,7 @@ class ReferentialPolicy < ApplicationPolicy
end
def validate?
- !archived? && create?
+ !archived? && create? && organisation_match?
end
def archive?
diff --git a/app/views/compliance_control_sets/show.html.slim b/app/views/compliance_control_sets/show.html.slim
index 851a4a41a..d915bbdaf 100644
--- a/app/views/compliance_control_sets/show.html.slim
+++ b/app/views/compliance_control_sets/show.html.slim
@@ -27,9 +27,8 @@
= render '/compliance_controls/filters'
/ compliance controls without block
- - if @direct_compliance_controls.try(:any?)
- = render_compliance_control_block
- = render_compliance_controls(@direct_compliance_controls)
+ = render_compliance_control_block
+ = render_compliance_controls(@direct_compliance_controls)
/ compliance controls with block
- if params[:q] && params[:q][:compliance_control_block_id_eq_any].try(:present?)
diff --git a/app/views/lines/_form.html.slim b/app/views/lines/_form.html.slim
index 4952b72ff..de0308289 100644
--- a/app/views/lines/_form.html.slim
+++ b/app/views/lines/_form.html.slim
@@ -4,6 +4,7 @@
= f.input :name
= f.input :network_id, as: :select, :collection => @line_referential.networks, include_blank: false
= f.input :company_id, as: :select, :collection => @line_referential.companies, include_blank: false
+ = f.input :secondary_company_ids, :collection => @line_referential.companies, include_blank: false, input_html: { multiple: true, 'data-select2ed': true }, label: t('activerecord.attributes.line.secondary_company')
= f.input :published_name
= f.input :registration_number
= f.input :number
diff --git a/app/views/lines/show.html.slim b/app/views/lines/show.html.slim
index 4969ca3cd..d62fe30d6 100644
--- a/app/views/lines/show.html.slim
+++ b/app/views/lines/show.html.slim
@@ -20,7 +20,7 @@
'Activé' => (@line.deactivated? ? t('false') : t('true')),
@line.human_attribute_name(:network_id) => (@line.network.nil? ? t('lines.index.unset') : @line.network.name),
@line.human_attribute_name(:company_id) => (@line.company.nil? ? t('lines.index.unset') : @line.company.name),
- 'Transporteur(s) secondaire(s)' => (@line.secondary_companies.nil? ? t('lines.index.unset') : @line.secondary_companies.collect(&:name).join(', ')),
+ 'Transporteur(s) secondaire(s)' => (@line.secondary_companies.nil? ? t('lines.index.unset') : array_to_html_list(@line.secondary_companies.collect(&:name))),
'Nom court' => @line.number,
'Code public' => (@line.registration_number ? @line.registration_number : '-'),
@line.human_attribute_name(:transport_mode) => (@line.transport_mode.present? ? t("enumerize.transport_mode.#{@line.transport_mode}") : '-'),
diff --git a/config/breadcrumbs.rb b/config/breadcrumbs.rb
index 970f933f0..eb285b731 100644
--- a/config/breadcrumbs.rb
+++ b/config/breadcrumbs.rb
@@ -82,8 +82,8 @@ crumb :import do |workbench, import|
end
crumb :import_resources do |import, import_resources|
- link I18n.t('import_resources.index.title'), workbench_import_import_resources_path(import.workbench, import)
- parent :import, import.workbench, import
+ link I18n.t('import_resources.index.title'), workbench_import_import_resources_path(import.workbench, import.parent)
+ parent :import, import.workbench, import.parent
end
crumb :organisation do |organisation|
diff --git a/config/initializers/ransack.rb b/config/initializers/ransack.rb
index 659ee4a79..09d895e47 100644
--- a/config/initializers/ransack.rb
+++ b/config/initializers/ransack.rb
@@ -4,6 +4,7 @@ Ransack.configure do |config|
formatter: proc { |v| v.split(' to ') },
type: :string
end
+
module Arel
module Predications
def between other
@@ -11,3 +12,19 @@ module Arel
end
end
end
+
+module Ransack
+ module Constants
+ module_function
+ # replace % \ to \% \\
+ def escape_wildcards(unescaped)
+ case ActiveRecord::Base.connection.adapter_name
+ when "Mysql2".freeze, "PostgreSQL".freeze, "PostGIS".freeze
+ # Necessary for PostgreSQL and MySQL
+ unescaped.to_s.gsub(/([\\|\%|_|.])/, '\\\\\\1')
+ else
+ unescaped
+ end
+ end
+ end
+end
diff --git a/config/locales/compliance_control_blocks.en.yml b/config/locales/compliance_control_blocks.en.yml
index 150157ff3..b9c01278c 100644
--- a/config/locales/compliance_control_blocks.en.yml
+++ b/config/locales/compliance_control_blocks.en.yml
@@ -17,7 +17,7 @@ fr:
new:
title: Create a control block
edit:
- title: "Edit the control block : %{compliance_control_block}"
+ title: "Edit the control block : %{name}"
metas:
control:
zero: "No controls"
diff --git a/config/locales/compliance_control_blocks.fr.yml b/config/locales/compliance_control_blocks.fr.yml
index 1222b5c1a..a6720881f 100644
--- a/config/locales/compliance_control_blocks.fr.yml
+++ b/config/locales/compliance_control_blocks.fr.yml
@@ -17,7 +17,7 @@ fr:
new:
title: Créer un groupe de contrôle(s)
edit:
- title: "Editer le groupe de contrôle : %{compliance_control_block}"
+ title: "Editer le groupe de contrôle : %{name}"
metas:
control:
zero: "Aucun contrôle"
diff --git a/config/locales/lines.en.yml b/config/locales/lines.en.yml
index a69c3b0ba..78d5c36be 100644
--- a/config/locales/lines.en.yml
+++ b/config/locales/lines.en.yml
@@ -66,6 +66,7 @@ en:
networks:
name: "Network"
company_id: "Company"
+ secondary_company: "Secondary company"
companies:
name: "Company"
registration_number: "Registration number"
diff --git a/config/locales/lines.fr.yml b/config/locales/lines.fr.yml
index 160cc4ab4..35f8792f4 100644
--- a/config/locales/lines.fr.yml
+++ b/config/locales/lines.fr.yml
@@ -67,6 +67,7 @@ fr:
networks:
name: "Réseau"
company_id: "Transporteur principal"
+ secondary_company: "Transporteurs secondaires"
companies:
name: "Transporteur principal"
registration_number: "Nom court"
diff --git a/spec/decorators/referential_decorator_spec.rb b/spec/decorators/referential_decorator_spec.rb
index 3959a5924..cbeaf2407 100644
--- a/spec/decorators/referential_decorator_spec.rb
+++ b/spec/decorators/referential_decorator_spec.rb
@@ -33,8 +33,7 @@ RSpec.describe ReferentialDecorator, type: [:helper, :decorator] do
expect_action_link_elements.to be_empty
expect_action_link_hrefs.to eq([
referential_time_tables_path(object),
- new_referential_path(from: object),
- referential_select_compliance_control_set_path(object)
+ new_referential_path(from: object)
])
end
end
diff --git a/spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js b/spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js
index c02ab3398..1c2cc1577 100644
--- a/spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js
+++ b/spec/javascript/vehicle_journeys/reducers/vehicle_journeys_spec.js
@@ -106,6 +106,7 @@ describe('vehicleJourneys reducer', () => {
company: fakeSelectedCompany,
published_journey_name: 'test',
published_journey_identifier: '',
+ short_id: '',
objectid: '',
footnotes: [],
time_tables: [],
diff --git a/spec/lib/compliance_control_set_cloner_spec.rb b/spec/lib/compliance_control_set_cloner_spec.rb
index c17f0bb52..7efe27659 100644
--- a/spec/lib/compliance_control_set_cloner_spec.rb
+++ b/spec/lib/compliance_control_set_cloner_spec.rb
@@ -102,7 +102,7 @@ RSpec.describe ComplianceControlSetCloner do
# Check correctly copied blocks
target_blox.zip(source_blox).each do | target_block, source_block |
expect( target_block.compliance_control_set ).to eq(target_set)
- expect( target_block.name ).to eq( [block_prefix, source_block.name].join(' ') )
+ expect( target_block.name ).to eq(source_block.name)
expect( target_block.condition_attributes ).to eq( source_block.condition_attributes )
end