aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjpl2017-05-17 12:10:02 +0200
committerjpl2017-05-17 12:10:10 +0200
commite217e93790f9b004ea30805e66bed5e3a25f67f4 (patch)
treede72c908b1bed64147dee77c83b2caeea9c407d9
parent6b7e24df14a4c18cb50b96e9b308bd6f3caf924d (diff)
downloadchouette-core-e217e93790f9b004ea30805e66bed5e3a25f67f4.tar.bz2
Refs #3399: adding objectid filter on vj
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js6
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js19
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js67
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js3
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/index.js4
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js4
-rw-r--r--app/controllers/vehicle_journeys_controller.rb41
-rw-r--r--config/routes.rb1
9 files changed, 131 insertions, 16 deletions
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
index 06f783620..eb7ab2c6d 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
@@ -217,6 +217,12 @@ const actions = {
published_name: selectedJP.published_name
}
}),
+ filterSelect2VehicleJourney: (selectedVJ) => ({
+ type : 'SELECT_VJ_FILTER',
+ selectedItem: {
+ objectid: selectedVJ.objectid
+ }
+ }),
createQueryString: () => ({
type: 'CREATE_QUERY_STRING'
}),
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
index 1895f23b7..5a8128688 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/Filters.js
@@ -1,16 +1,26 @@
var React = require('react')
var PropTypes = require('react').PropTypes
var MissionSelect2 = require('./tools/select2s/MissionSelect2')
+var VJSelect2 = require('./tools/select2s/VJSelect2')
var TimetableSelect2 = require('./tools/select2s/TimetableSelect2')
-const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTimeFilter, onUpdateEndTimeFilter, onToggleWithoutSchedule, onSelect2Timetable, onSelect2JourneyPattern}) => {
+const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTimeFilter, onUpdateEndTimeFilter, onToggleWithoutSchedule, onSelect2Timetable, onSelect2JourneyPattern, onSelect2VehicleJourney}) => {
return (
<div className='row'>
<div className='col-lg-12'>
<div className='form form-filter'>
<div className='ffg-row'>
+ {/* ID course */}
+ <div className="form-group w33">
+ <VJSelect2
+ onSelect2VehicleJourney={onSelect2VehicleJourney}
+ filters={filters}
+ isFilter={true}
+ />
+ </div>
+
{/* Missions */}
- <div className='form-group w40'>
+ <div className='form-group w33'>
<MissionSelect2
onSelect2JourneyPattern={onSelect2JourneyPattern}
filters={filters}
@@ -19,7 +29,7 @@ const Filters = ({filters, pagination, onFilter, onResetFilters, onUpdateStartTi
</div>
{/* Calendriers */}
- <div className='form-group w40'>
+ <div className='form-group w33'>
<TimetableSelect2
onSelect2Timetable={onSelect2Timetable}
hasRoute={true}
@@ -131,7 +141,8 @@ Filters.propTypes = {
onUpdateStartTimeFilter: PropTypes.func.isRequired,
onUpdateEndTimeFilter: PropTypes.func.isRequired,
onSelect2Timetable: PropTypes.func.isRequired,
- onSelect2JourneyPattern: PropTypes.func.isRequired
+ onSelect2JourneyPattern: PropTypes.func.isRequired,
+ onSelect2VehicleJourney: PropTypes.func.isRequired
}
module.exports = Filters
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
index bd2c84c16..c8a160510 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
@@ -32,7 +32,7 @@ class BSelect4 extends React.Component{
delay: '500',
data: function(params) {
return {
- q: {published_name_or_objectid_cont: params.term},
+ q: {published_name_cont: params.term},
};
},
processResults: function(data, params) {
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js
new file mode 100644
index 000000000..fe927ac84
--- /dev/null
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js
@@ -0,0 +1,67 @@
+var _ = require('lodash')
+var React = require('react')
+var PropTypes = require('react').PropTypes
+var Select2 = require('react-select2')
+
+// get JSON full path
+var origin = window.location.origin
+var path = window.location.pathname.split('/', 7).join('/')
+
+
+class BSelect4b extends React.Component{
+ constructor(props) {
+ super(props)
+ }
+ humanOID(oid) {
+ var a = oid.split(':')
+ return a[a.length - 1]
+ }
+
+ render() {
+ return (
+ <Select2
+ data={(this.props.isFilter) ? [this.props.filters.query.vehicleJourney.objectid] : undefined}
+ value={(this.props.isFilter) ? this.props.filters.query.vehicleJourney.objectid : undefined}
+ onSelect={(e) => this.props.onSelect2VehicleJourney(e)}
+ multiple={false}
+ ref='vehicle_journey_objectid'
+ options={{
+ allowClear: false,
+ theme: 'bootstrap',
+ placeholder: 'Filtrer par ID course...',
+ width: '100%',
+ ajax: {
+ url: origin + path + '/vehicle_journeys.json',
+ dataType: 'json',
+ delay: '500',
+ data: function(params) {
+ return {
+ q: {objectid_cont: params.term},
+ };
+ },
+ processResults: function(data, params) {
+ return {
+ results: data.vehicle_journeys.map(
+ item => _.assign(
+ {},
+ item,
+ { id: item.objectid, text: _.last(_.split(item.objectid, ':')) }
+ )
+ )
+ };
+ },
+ cache: true
+ },
+ minimumInputLength: 2,
+ templateResult: formatRepo
+ }}
+ />
+ )
+ }
+}
+
+const formatRepo = (props) => {
+ if(props.text) return props.text
+}
+
+module.exports = BSelect4b
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
index 7570dd466..9650bc646 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/Filters.js
@@ -33,6 +33,9 @@ const mapDispatchToProps = (dispatch) => {
},
onSelect2JourneyPattern: (e) => {
dispatch(actions.filterSelect2JourneyPattern(e.params.data))
+ },
+ onSelect2VehicleJourney: (e) => {
+ dispatch(actions.filterSelect2VehicleJourney(e.params.data))
}
}
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
index 4c9423c1f..d2d255b3b 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
@@ -38,6 +38,9 @@ var initialState = {
journeyPattern: {
published_name: ''
},
+ vehicleJourney: {
+ objectid: ''
+ },
company: {
name: ''
},
@@ -76,6 +79,7 @@ if (window.jpOrigin){
}
let params = {
'q[journey_pattern_id_eq]': initialState.filters.query.journeyPattern.id,
+ 'q[objectid_cont]': initialState.filters.query.vehicleJourney.objectid
}
initialState.filters.queryString = actions.encodeParams(params)
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
index cd065e362..c1cce7492 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js
@@ -44,6 +44,9 @@ const filters = (state = {}, action) => {
case 'SELECT_JP_FILTER':
newQuery = _.assign({}, state.query, {journeyPattern : action.selectedItem})
return _.assign({}, state, {query: newQuery})
+ case 'SELECT_VJ_FILTER':
+ newQuery = _.assign({}, state.query, {vehicleJourney : action.selectedItem})
+ return _.assign({}, state, {query: newQuery})
case 'TOGGLE_ARRIVALS':
return _.assign({}, state, {toggleArrivals: !state.toggleArrivals})
case 'QUERY_FILTER_VEHICLEJOURNEYS':
@@ -52,6 +55,7 @@ const filters = (state = {}, action) => {
case 'CREATE_QUERY_STRING':
let params = {
'q[journey_pattern_id_eq]': state.query.journeyPattern.id || undefined,
+ 'q[objectid_cont]': state.query.vehicleJourney.objectid || undefined,
'q[time_tables_id_eq]': state.query.timetable.id || undefined,
'q[vehicle_journey_at_stops_departure_time_gteq]': (state.query.interval.start.hour + ':' + state.query.interval.start.minute),
'q[vehicle_journey_at_stops_departure_time_lteq]': (state.query.interval.end.hour + ':' + state.query.interval.end.minute),
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb
index d8cbef478..5c24652e5 100644
--- a/app/controllers/vehicle_journeys_controller.rb
+++ b/app/controllers/vehicle_journeys_controller.rb
@@ -3,7 +3,7 @@ class VehicleJourneysController < ChouetteController
before_action :user_permissions, only: :index
respond_to :json, :only => :index
- respond_to :js, :only => [:select_journey_pattern, :edit, :new, :index]
+ respond_to :js, :only => [:select_journey_pattern, :select_vehicle_journey, :edit, :new, :index]
belongs_to :referential do
belongs_to :line, :parent_class => Chouette::Line do
@@ -18,12 +18,17 @@ class VehicleJourneysController < ChouetteController
def select_journey_pattern
if params[:journey_pattern_id]
- selected_journey_pattern = Chouette::JourneyPattern.find( params[:journey_pattern_id])
+ selected_journey_pattern = Chouette::JourneyPattern.find(params[:journey_pattern_id])
@vehicle_journey = vehicle_journey
@vehicle_journey.update_journey_pattern(selected_journey_pattern)
end
end
+ def select_vehicle_journey
+ if params[:vehicle_journey_objectid]
+ @vehicle_journey = Chouette::VehicleJourney.find(params[:vehicle_journey_objectid])
+ end
+ end
def create
create!(:alert => t('activerecord.errors.models.vehicle_journey.invalid_times'))
@@ -136,14 +141,28 @@ class VehicleJourneysController < ChouetteController
private
def vehicle_journey_params
- params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name,
- :published_journey_identifier, :comment, :transport_mode,
- :mobility_restricted_suitability, :flexible_service, :status_value,
- :facility, :vehicle_type_identifier, :objectid, :time_table_tokens,
- { date: [ :hour, :minute ] }, :button, :referential_id, :line_id,
- :route_id, :id, { vehicle_journey_at_stops_attributes: [ :arrival_time,
- :id, :_destroy,
- :stop_point_id,
- :departure_time] } )
+ params.require(:vehicle_journey).permit(
+ { footnote_ids: [] },
+ :journey_pattern_id,
+ :number,
+ :published_journey_name,
+ :published_journey_identifier,
+ :comment,
+ :transport_mode,
+ :mobility_restricted_suitability,
+ :flexible_service,
+ :status_value,
+ :facility,
+ :vehicle_type_identifier,
+ :objectid,
+ :time_table_tokens,
+ { date: [:hour, :minute] },
+ :button,
+ :referential_id,
+ :line_id,
+ :route_id,
+ :id,
+ { vehicle_journey_at_stops_attributes: [:arrival_time, :id, :_destroy, :stop_point_id, :departure_time] }
+ )
end
end
diff --git a/config/routes.rb b/config/routes.rb
index 8415d49df..06f64c4dd 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -118,6 +118,7 @@ ChouetteIhm::Application.routes.draw do
resource :vehicle_journeys_collection, :only => [:show, :update]
resources :vehicle_journeys, :vehicle_journey_frequencies do
get 'select_journey_pattern', :on => :member
+ get 'select_vehicle_journey', :on => :member
resources :vehicle_translations
resources :time_tables
end