aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts
diff options
context:
space:
mode:
authorcedricnjanga2017-09-19 15:56:09 +0200
committercedricnjanga2017-09-19 15:56:09 +0200
commitd0703700f5b5e663739e9897c04c2136c953fa7e (patch)
tree91b9cbf1568556ae65162fec2fe23b1ea58da784 /app/assets/javascripts
parentefa8b6072e35f09d580f227b0b3175260c145fea (diff)
parent5ffc337dfc86017840a5402058d490fd20d29bf4 (diff)
downloadchouette-core-d0703700f5b5e663739e9897c04c2136c953fa7e.tar.bz2
Resolve merge conflicts
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js5
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/actions/index.js26
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js8
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js20
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js27
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js96
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js77
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js25
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js5
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js11
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js7
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DuplicateVehicleJourney.js4
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js22
-rw-r--r--app/assets/javascripts/filters/calendar.js6
-rw-r--r--app/assets/javascripts/filters/import.js6
-rw-r--r--app/assets/javascripts/filters/time_table.js7
-rw-r--r--app/assets/javascripts/filters/workbench.js6
-rw-r--r--app/assets/javascripts/helpers/date_filters.js38
-rw-r--r--app/assets/javascripts/routes.coffee2
-rw-r--r--app/assets/javascripts/time_table.coffee14
-rw-r--r--app/assets/javascripts/workbench.coffee18
21 files changed, 232 insertions, 198 deletions
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
index 3577df2b6..825e7bb7d 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
@@ -90,10 +90,7 @@ const actions = {
resetValidation: (target) => {
$(target).parent().removeClass('has-error').children('.help-block').remove()
},
- humanOID : (oid) => {
- var a = oid.split(':')
- return a[a.length - 1]
- },
+ humanOID : (oid) => oid.split(':')[2].split("-").pop(),
validateFields : (fields) => {
const test = []
diff --git a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
index 7a1ba10ff..a6add8418 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/actions/index.js
@@ -105,12 +105,13 @@ const actions = {
group,
selectType
}),
- validatePeriodForm: (modalProps, timeTablePeriods, metas, timetableInDates) => ({
+ validatePeriodForm: (modalProps, timeTablePeriods, metas, timetableInDates, error) => ({
type: 'VALIDATE_PERIOD_FORM',
modalProps,
timeTablePeriods,
metas,
- timetableInDates
+ timetableInDates,
+ error
}),
addIncludedDate: (index, dayTypes, date) => ({
type: 'ADD_INCLUDED_DATE',
@@ -233,12 +234,16 @@ const actions = {
let error = ''
start = new Date(start)
end = new Date(end)
- _.each(periods, (period, i) => {
- if(index !== i && !period.deleted){
- if((new Date(period.period_start) <= start && new Date(period.period_end) >= start) || (new Date(period.period_start) <= end && new Date(period.period_end) >= end) || (start >= new Date(period.period_start) && end <= new Date(period.period_end)) || (start <= new Date(period.period_start) && end >= new Date(period.period_end)))
- error = 'Les périodes ne peuvent pas se chevaucher'
+
+ for (let i = 0; i < periods.length; i++) {
+ let period = periods[i]
+ if (index !== i && !period.deleted) {
+ if (new Date(period.period_start) <= end && new Date(period.period_end) >= start) {
+ error = 'Les périodes ne peuvent pas se chevaucher'
+ break
+ }
}
- })
+ }
return error
},
checkErrorsInDates: (start, end, in_days, dayTypes) => {
@@ -246,11 +251,12 @@ const actions = {
start = new Date(start)
end = new Date(end)
- _.each(in_days, ({date}) => {
- if (start <= new Date(date) && end >= new Date(date) && dayTypes[new Date(date).getDay()]) {
+ for (let day of in_days) {
+ if (start <= new Date(day.date) && end >= new Date(day.date)) {
error = 'Une période ne peut chevaucher une date dans un calendrier'
+ break
}
- })
+ }
return error
},
fetchTimeTables: (dispatch, nextPage) => {
diff --git a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
index 723a4a7fb..951a09741 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js
@@ -28,7 +28,13 @@ const mapDispatchToProps = (dispatch) => {
dispatch(actions.updatePeriodForm(val, group, 'day'))
},
onValidatePeriodForm: (modalProps, timeTablePeriods, metas, timetableInDates) => {
- dispatch(actions.validatePeriodForm(modalProps, timeTablePeriods, metas, timetableInDates))
+ let period_start = actions.formatDate(modalProps.begin)
+ let period_end = actions.formatDate(modalProps.end)
+ let error = ''
+ if (new Date(period_end) <= new Date(period_start)) error = 'La date de départ doit être antérieure à la date de fin'
+ if (error == '') error = actions.checkErrorsInPeriods(period_start, period_end, modalProps.index, timeTablePeriods)
+ if (error == '') error = actions.checkErrorsInDates(period_start, period_end, timetableInDates)
+ dispatch(actions.validatePeriodForm(modalProps, timeTablePeriods, metas, timetableInDates, error))
}
}
}
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
index 3329aa56f..c61296f1c 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/modal.js
@@ -27,7 +27,7 @@ const modal = (state = {}, action) => {
newModalProps = _.assign({}, state.modalProps, {error: ''})
return _.assign({}, state, {type: ''}, {modalProps: newModalProps})
case 'CLOSE_PERIOD_FORM':
- newModalProps = _.assign({}, state.modalProps, {active: false})
+ newModalProps = _.assign({}, state.modalProps, {active: false, error: ""})
return _.assign({}, state, {modalProps: newModalProps})
case 'OPEN_EDIT_PERIOD_FORM':
period_start = action.period.period_start.split('-')
@@ -54,21 +54,9 @@ const modal = (state = {}, action) => {
newModalProps[action.group][action.selectType] = action.val
return _.assign({}, state, {modalProps: newModalProps})
case 'VALIDATE_PERIOD_FORM':
- period_start = actions.formatDate(action.modalProps.begin)
- period_end = actions.formatDate(action.modalProps.end)
- newModalProps = _.assign({}, state.modalProps)
-
- if(new Date(period_end) <= new Date(period_start)){
- newModalProps.error = 'La date de départ doit être antérieure à la date de fin'
- return _.assign({}, state, {modalProps: newModalProps})
- }
-
- let newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods))
- let newDays = JSON.parse(JSON.stringify(action.timetableInDates))
- let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods)
- if (error == '') error = actions.checkErrorsInDates(period_start, period_end, newDays, action.metas.day_types)
- newModalProps.error = error
- newModalProps.active = (error == '') ? false : true
+ newModalProps = JSON.parse(JSON.stringify(state.modalProps))
+ newModalProps.error = action.error
+ newModalProps.active = (newModalProps.error == '') ? false : true
return _.assign({}, state, {modalProps: newModalProps})
default:
return state
diff --git a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
index cbdf8fa60..d61c813ec 100644
--- a/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
+++ b/app/assets/javascripts/es6_browserified/time_tables/reducers/timetable.js
@@ -83,23 +83,27 @@ const timetable = (state = {}, action) => {
})
newState = _.assign({}, state, {current_month: newCM, time_table_dates: newDates})
return _.assign({}, newState, {current_month: actions.updateSynthesis(newState, action.dayTypes)})
+ case 'UPDATE_DAY_TYPES':
+ // We get the week days of the activated day types to reject the out_dates that that are out of newDayTypes
+ let weekDays = _.reduce(action.dayTypes, (array, dt, i) => {
+ if (dt) array.push(i)
+ return array
+ }, [])
+
+ newDates = _.reject(state.time_table_dates, (d) => {
+ return d.in_out == false && !weekDays.includes(new Date(d.date).getDay())
+ })
+ return _.assign({}, state, {time_table_dates: newDates})
case 'UPDATE_CURRENT_MONTH_FROM_DAYTYPES':
return _.assign({}, state, {current_month: actions.updateSynthesis(state, action.dayTypes)})
case 'VALIDATE_PERIOD_FORM':
+ if (action.error != '') return state
+
let period_start = actions.formatDate(action.modalProps.begin)
let period_end = actions.formatDate(action.modalProps.end)
- if(new Date(period_end) <= new Date(period_start)){
- return state
- }
- newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods))
- let inDates = JSON.parse(JSON.stringify(action.timetableInDates))
- let error = actions.checkErrorsInPeriods(period_start, period_end, action.modalProps.index, newPeriods)
- if (error == '') error = actions.checkErrorsInDates(period_start, period_end, inDates, action.metas.day_types)
- if(error != ''){
- return state
- }
- let updatePeriod
+ let newPeriods = JSON.parse(JSON.stringify(action.timeTablePeriods))
+
if (action.modalProps.index !== false){
updatePeriod = state.time_table_periods[action.modalProps.index]
updatePeriod.period_start = period_start
@@ -116,7 +120,6 @@ const timetable = (state = {}, action) => {
newDates = newDates || state.time_table_dates
newState =_.assign({}, state, {time_table_periods: newPeriods, time_table_dates: newDates})
return _.assign({}, newState, {current_month: actions.updateSynthesis(newState, action.metas.day_types)})
-
default:
return state
}
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 0b35591b2..2e2e06514 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
@@ -139,13 +139,14 @@ const actions = {
type: 'EDIT_VEHICLEJOURNEY_NOTES',
footnotes
}),
- shiftVehicleJourney : (data) => ({
+ shiftVehicleJourney : (addtionalTime) => ({
type: 'SHIFT_VEHICLEJOURNEY',
- data
+ addtionalTime
}),
- duplicateVehicleJourney : (data, departureDelta) => ({
+ duplicateVehicleJourney : (addtionalTime, duplicateNumber, departureDelta) => ({
type: 'DUPLICATE_VEHICLEJOURNEY',
- data,
+ addtionalTime,
+ duplicateNumber,
departureDelta
}),
deleteVehicleJourneys : () => ({
@@ -268,10 +269,7 @@ const actions = {
type: 'RECEIVE_TOTAL_COUNT',
total
}),
- humanOID : (oid) => {
- var a = oid.split(':')
- return a[a.length - 1]
- },
+ humanOID: (oid) => oid.split(':')[2].split("-").pop(),
fetchVehicleJourneys : (dispatch, currentPage, nextPage, queryString) => {
if(currentPage == undefined){
currentPage = 1
@@ -394,7 +392,7 @@ const actions = {
},
simplePad: (d) => {
if(d.toString().length == 1){
- return (d < 10) ? '0' + d.toString() : d.toString();
+ return '0' + d.toString()
}else{
return d.toString()
}
@@ -428,8 +426,8 @@ const actions = {
return vjas
},
getDuplicateDelta: (original, newDeparture) => {
- if (original.departure_time.hour != '' && original.departure_time.minute != '' && newDeparture.departure_time.hour != '' && newDeparture.departure_time.minute != ''){
- return (parseInt(newDeparture.departure_time.hour) - parseInt(original.departure_time.hour)) * 60 + (parseInt(newDeparture.departure_time.minute) - parseInt(original.departure_time.minute))
+ if (original.departure_time.hour != '' && original.departure_time.minute != '' && newDeparture.departure_time.hour != undefined && newDeparture.departure_time.minute != undefined){
+ return (newDeparture.departure_time.hour - parseInt(original.departure_time.hour)) * 60 + (newDeparture.departure_time.minute - parseInt(original.departure_time.minute))
}
return 0
},
@@ -441,69 +439,25 @@ const actions = {
vjas.delta = delta
return vjas
},
- checkSchedules: (schedule) => {
- let hours = 0
- let minutes = 0
- if (parseInt(schedule.departure_time.minute) > 59){
- hours = Math.floor(parseInt(schedule.departure_time.minute) / 60)
- minutes = parseInt(schedule.departure_time.minute) % 60
- schedule.departure_time.minute = actions.simplePad(minutes, 'minute')
- schedule.departure_time.hour = parseInt(schedule.departure_time.hour) + hours
- }
- if (parseInt(schedule.arrival_time.minute) > 59){
- hours = Math.floor(parseInt(schedule.arrival_time.minute) / 60)
- minutes = parseInt(schedule.arrival_time.minute) % 60
- schedule.arrival_time.minute = actions.simplePad(minutes, 'minute')
- schedule.arrival_time.hour = parseInt(schedule.arrival_time.hour) + hours
- }
- if (parseInt(schedule.departure_time.minute) < 0){
- hours = Math.floor(parseInt(schedule.departure_time.minute) / 60)
- minutes = (parseInt(schedule.departure_time.minute) % 60) + 60
- if(minutes == 60){
- minutes = 0
- }
- schedule.departure_time.minute = actions.simplePad(minutes, 'minute')
- schedule.departure_time.hour = parseInt(schedule.departure_time.hour) + hours
- }
- if (parseInt(schedule.arrival_time.minute) < 0){
- hours = Math.floor(parseInt(schedule.arrival_time.minute) / 60)
- minutes = (parseInt(schedule.arrival_time.minute) % 60) + 60
- if(minutes == 60){
- minutes = 0
- }
- schedule.arrival_time.minute = actions.simplePad(minutes, 'minute')
- schedule.arrival_time.hour = parseInt(schedule.arrival_time.hour) + hours
- }
+ getShiftedSchedule: ({departure_time, arrival_time}, additional_time) => {
+ // We create dummy dates objects to manipulate time more easily
+ let departureDT = new Date (Date.UTC(2017, 2, 1, parseInt(departure_time.hour), parseInt(departure_time.minute)))
+ let arrivalDT = new Date (Date.UTC(2017, 2, 1, parseInt(arrival_time.hour), parseInt(arrival_time.minute)))
- if(parseInt(schedule.departure_time.hour) > 23){
- schedule.departure_time.hour = '23'
- schedule.departure_time.minute = '59'
- }
- if(parseInt(schedule.arrival_time.hour) > 23){
- schedule.arrival_time.hour = '23'
- schedule.arrival_time.minute = '59'
- }
+ let newDepartureDT = new Date (departureDT.getTime() + additional_time * 60000)
+ let newArrivalDT = new Date (arrivalDT.getTime() + additional_time * 60000)
- if(parseInt(schedule.departure_time.hour) < 0){
- schedule.departure_time.hour = '00'
- schedule.departure_time.minute = '00'
- }
- if(parseInt(schedule.arrival_time.hour) < 0){
- schedule.arrival_time.hour = '00'
- schedule.arrival_time.minute = '00'
+ return {
+ departure_time: {
+ hour: actions.simplePad(newDepartureDT.getUTCHours()),
+ minute: actions.simplePad(newDepartureDT.getUTCMinutes())
+ },
+ arrival_time: {
+ hour: actions.simplePad(newArrivalDT.getUTCHours()),
+ minute: actions.simplePad(newArrivalDT.getUTCMinutes())
+ }
}
-
- schedule.departure_time.hour = actions.simplePad(parseInt(schedule.departure_time.hour), 'hour')
- schedule.arrival_time.hour = actions.simplePad(parseInt(schedule.arrival_time.hour), 'hour')
- // if (parseInt(schedule.departure_time.hour) > 23){
- // schedule.departure_time.hour = parseInt(schedule.departure_time.hour) - 24
- // }
- // if (parseInt(schedule.arrival_time.hour) > 23){
- // schedule.arrival_time.hour = parseInt(schedule.arrival_time.hour) - 24
- // }
- // schedule.departure_time.hour = actions.pad(schedule.departure_time.hour, 'hour')
- // schedule.arrival_time.hour = actions.pad(schedule.arrival_time.hour, 'hour')
- }
+ },
}
module.exports = actions
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js
index 34463600a..9446b993a 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js
@@ -7,33 +7,64 @@ var _ = require('lodash')
class DuplicateVehicleJourney extends Component {
constructor(props) {
super(props)
+ this.state = {}
+ this.onFormChange = this.onFormChange.bind(this)
+ this.handleSubmit = this.handleSubmit.bind(this)
+ }
+
+ componentWillReceiveProps() {
+ if (actions.getSelected(this.props.vehicleJourneys).length > 0) {
+ let hour = parseInt(this.getDefaultValue('hour'))
+ let miunte = parseInt(this.getDefaultValue('minute'))
+ this.setState((state, props) => {
+ return {
+ originalDT: {
+ hour: hour,
+ minute: miunte
+ },
+ duplicate_time_hh: hour,
+ duplicate_time_mm: miunte,
+ additional_time: 0,
+ duplicate_number: 1
+ }
+ })
+ }
}
handleSubmit() {
if(actions.validateFields(this.refs) == true) {
let newDeparture = {
departure_time : {
- hour: this.refs.duplicate_time_hh.value,
- minute: this.refs.duplicate_time_mm.value
+ hour: this.state.duplicate_time_hh,
+ minute: this.state.duplicate_time_mm
}
}
let val = actions.getDuplicateDelta(_.find(actions.getSelected(this.props.vehicleJourneys)[0].vehicle_journey_at_stops, {'dummy': false}), newDeparture)
- this.refs.additional_time.value = parseInt(this.refs.additional_time.value)
- this.props.onDuplicateVehicleJourney(this.refs, val)
+ this.props.onDuplicateVehicleJourney(this.state.additional_time, this.state.duplicate_number, val)
this.props.onModalClose()
$('#DuplicateVehicleJourneyModal').modal('hide')
}
}
+ onFormChange(e) {
+ let {name, value} = e.target
+ this.setState((state, props) => {
+ return {
+ [name]: parseInt(value)
+ }
+ })
+ }
+
getDefaultValue(type) {
let vjas = _.find(actions.getSelected(this.props.vehicleJourneys)[0].vehicle_journey_at_stops, {'dummy': false})
return vjas.departure_time[type]
}
+
render() {
if(this.props.status.isFetching == true) {
return false
}
- if(this.props.status.fetchSuccess == true) {
+ if(this.props.status.fetchSuccess == true && actions.getSelected(this.props.vehicleJourneys).length > 0) {
return (
<li className='st_action'>
<button
@@ -65,22 +96,26 @@ class DuplicateVehicleJourney extends Component {
<span className={'input-group time' + (actions.getSelected(this.props.vehicleJourneys).length > 1 ? ' disabled' : '')}>
<input
type='number'
+ name='duplicate_time_hh'
ref='duplicate_time_hh'
min='00'
max='23'
className='form-control'
- defaultValue={this.getDefaultValue('hour')}
- disabled={(actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
+ value={this.state.duplicate_time_hh}
+ onChange={e => this.onFormChange(e)}
+ disabled={actions.getSelected(this.props.vehicleJourneys) && (actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
/>
<span>:</span>
<input
type='number'
+ name='duplicate_time_mm'
ref='duplicate_time_mm'
min='00'
max='59'
className='form-control'
- defaultValue={this.getDefaultValue('minute')}
- disabled={(actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
+ value={this.state.duplicate_time_mm}
+ onChange={e => this.onFormChange(e)}
+ disabled={actions.getSelected(this.props.vehicleJourneys) && (actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'disabled' : '')}
/>
</span>
</span>
@@ -92,11 +127,13 @@ class DuplicateVehicleJourney extends Component {
<input
type='number'
style={{'width': 104}}
+ name='duplicate_number'
ref='duplicate_number'
min='1'
max='20'
- defaultValue='1'
+ value={this.state.duplicate_number}
className='form-control'
+ onChange={e => this.onFormChange(e)}
onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
required
/>
@@ -105,19 +142,21 @@ class DuplicateVehicleJourney extends Component {
<div className='form-group'>
<label className='control-label is-required col-sm-8'>Décalage à partir duquel on créé les courses</label>
- <div className="col-sm-4">
+ <span className="col-sm-4">
<input
type='number'
style={{'width': 104}}
+ name='additional_time'
ref='additional_time'
- min='-59'
- max='59'
- defaultValue='0'
- className='form-control'
+ min='-720'
+ max='720'
+ value={this.state.additional_time}
+ className='form-control disabled'
+ onChange={e => this.onFormChange(e)}
onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
required
- />
- </div>
+ />
+ </span>
</div>
</div>
@@ -131,9 +170,9 @@ class DuplicateVehicleJourney extends Component {
Annuler
</button>
<button
- className='btn btn-primary'
+ className={'btn btn-primary ' + (this.state.additional_time == 0 && this.state.originalDT.hour == this.state.duplicate_time_hh && this.state.originalDT.minute == this.state.duplicate_time_mm ? 'disabled' : '')}
type='button'
- onClick={this.handleSubmit.bind(this)}
+ onClick={this.handleSubmit}
>
Valider
</button>
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js
index 269bb1b8c..dd0bade39 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js
@@ -6,16 +6,27 @@ var actions = require('../../actions')
class ShiftVehicleJourney extends Component {
constructor(props) {
super(props)
+ this.state = {
+ additional_time: 0
+ }
}
handleSubmit() {
if(actions.validateFields(this.refs) == true) {
- this.props.onShiftVehicleJourney(this.refs)
+ this.props.onShiftVehicleJourney(this.state.additional_time)
this.props.onModalClose()
$('#ShiftVehicleJourneyModal').modal('hide')
}
}
+ handleAdditionalTimeChange() {
+ this.setState((state, props) => {
+ return {
+ additional_time: parseInt(this.refs.additional_time.value)
+ }
+ })
+ }
+
render() {
if(this.props.status.isFetching == true) {
return false
@@ -53,14 +64,16 @@ class ShiftVehicleJourney extends Component {
<label className='control-label is-required'>Avec un décalage de</label>
<input
type='number'
+ style={{'width': 104}}
ref='additional_time'
- min='-59'
- max='59'
+ min='-720'
+ max='720'
+ value={this.state.additional_time}
className='form-control'
- defaultValue='0'
+ onChange={this.handleAdditionalTimeChange.bind(this)}
onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
required
- />
+ />
</div>
</div>
</div>
@@ -75,7 +88,7 @@ class ShiftVehicleJourney extends Component {
Annuler
</button>
<button
- className='btn btn-primary'
+ className={'btn btn-primary ' + (this.state.additional_time == 0 ? 'disabled' : '')}
type='button'
onClick={this.handleSubmit.bind(this)}
>
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 922a1e5ee..2f49e9980 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
@@ -2,6 +2,7 @@ var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
+var humanOID = require('../../../actions').humanOID
// get JSON full path
var origin = window.location.origin
@@ -34,7 +35,7 @@ class BSelect4 extends React.Component{
delay: '500',
data: function(params) {
return {
- q: {published_name_cont_or_short_id_or_registration_number_cont: params.term},
+ q: {published_name_or_objectid_or_registration_number_cont: params.term},
};
},
processResults: function(data, params) {
@@ -43,7 +44,7 @@ class BSelect4 extends React.Component{
item => _.assign(
{},
item,
- { text: "<strong>" + item.published_name + " - " + item.short_id + "</strong><br/><small>" + item.registration_number + "</small>" }
+ { text: "<strong>" + item.published_name + " - " + humanOID(item.object_id) + "</strong><br/><small>" + item.registration_number + "</small>" }
)
)
};
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
index 0183aac43..2248175ab 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
@@ -2,7 +2,7 @@ var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
-var actions = require('../../../actions')
+var humanOID = require('../../../actions').humanOID
// get JSON full path
var origin = window.location.origin
@@ -33,8 +33,13 @@ class BSelect4 extends React.Component{
dataType: 'json',
delay: '500',
data: function(params) {
+ let newParmas = params.term.split(" ")
return {
- q: {short_id_or_comment_cont: params.term},
+ q: {
+ objectid_cont_any: newParmas,
+ comment_cont_any: newParmas,
+ m: 'or'
+ }
};
},
processResults: function(data, params) {
@@ -43,7 +48,7 @@ class BSelect4 extends React.Component{
item => _.assign(
{},
item,
- {text: '<strong>' + "<span class='fa fa-circle' style='color:" + (item.color ? item.color : '#4B4B4B') + "'></span> " + item.comment + ' - ' + item.short_id + '</strong><br/><small>' + (item.day_types ? item.day_types.match(/[A-Z]?[a-z]+/g).join(', ') : "") + '</small>'}
+ {text: '<strong>' + "<span class='fa fa-circle' style='color:" + (item.color ? item.color : '#4B4B4B') + "'></span> " + item.comment + ' - ' + humanOID(item.objectid) + '</strong><br/><small>' + (item.day_types ? item.day_types.match(/[A-Z]?[a-z]+/g).join(', ') : "") + '</small>'}
)
)
};
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
index cc2ee4b9e..b9678ea9a 100644
--- 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
@@ -2,6 +2,7 @@ var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
+var humanOID = require('../../../actions').humanOID
// get JSON full path
var origin = window.location.origin
@@ -12,10 +13,6 @@ class BSelect4b extends React.Component{
constructor(props) {
super(props)
}
- humanOID(oid) {
- var a = oid.split(':')
- return a[a.length - 1]
- }
render() {
return (
@@ -46,7 +43,7 @@ class BSelect4b extends React.Component{
item => _.assign(
{},
item,
- { id: item.objectid, text: _.last(_.split(item.objectid, ':')) }
+ { id: item.objectid, text: humanOID(item.objectid) }
)
)
};
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DuplicateVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DuplicateVehicleJourney.js
index 224b52a19..70e8fde4d 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DuplicateVehicleJourney.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DuplicateVehicleJourney.js
@@ -19,8 +19,8 @@ const mapDispatchToProps = (dispatch) => {
onOpenDuplicateModal: () =>{
dispatch(actions.openDuplicateModal())
},
- onDuplicateVehicleJourney: (data, departureDelta) =>{
- dispatch(actions.duplicateVehicleJourney(data, departureDelta))
+ onDuplicateVehicleJourney: (addtionalTime, duplicateNumber, departureDelta) =>{
+ dispatch(actions.duplicateVehicleJourney(addtionalTime, duplicateNumber, departureDelta))
}
}
}
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
index d463d4b8f..969b2ddd8 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js
@@ -51,17 +51,8 @@ const vehicleJourney= (state = {}, action, keep) => {
let shiftedArray, shiftedSchedule, shiftedVjas
shiftedArray = state.vehicle_journey_at_stops.map((vjas, i) => {
if (!vjas.dummy){
- shiftedSchedule = {
- departure_time: {
- hour: vjas.departure_time.hour,
- minute: actions.simplePad(parseInt(vjas.departure_time.minute) + parseInt(action.data.additional_time.value))
- },
- arrival_time: {
- hour: vjas.arrival_time.hour,
- minute: actions.simplePad(parseInt(vjas.arrival_time.minute) + parseInt(action.data.additional_time.value))
- }
- }
- actions.checkSchedules(shiftedSchedule)
+ shiftedSchedule = actions.getShiftedSchedule(vjas, action.addtionalTime)
+
shiftedVjas = _.assign({}, state.vehicle_journey_at_stops[i], shiftedSchedule)
vjas = _.assign({}, state.vehicle_journey_at_stops[i], shiftedVjas)
if(!keep){
@@ -181,13 +172,16 @@ const vehicleJourneys = (state = [], action) => {
let dupeVj
let dupes = []
let selectedIndex
- let val = action.data.additional_time.value
+ let val = action.addtionalTime
let departureDelta = action.departureDelta
state.map((vj, i) => {
if(vj.selected){
selectedIndex = i
- for (i = 0; i< action.data.duplicate_number.value; i++){
- action.data.additional_time.value = (parseInt(val) * (i + 1)) + departureDelta
+ for (i = 0; i< action.duplicateNumber; i++){
+ // We check if the departureDelta is != 0 to create the first VJ on the updated deparure time if it is the case
+ // let delta = departureDelta == 0 ? 1 : 0
+ // action.addtionalTime = (val * (i + delta)) + departureDelta
+ action.addtionalTime = (val * (i + 1)) + departureDelta
dupeVj = vehicleJourney(vj, action, false)
dupeVj.published_journey_name = dupeVj.published_journey_name + '-' + i
dupeVj.selected = false
diff --git a/app/assets/javascripts/filters/calendar.js b/app/assets/javascripts/filters/calendar.js
new file mode 100644
index 000000000..a4e84777c
--- /dev/null
+++ b/app/assets/javascripts/filters/calendar.js
@@ -0,0 +1,6 @@
+const DateFilter = require('../helpers/date_filters')
+
+$(document).ready(function(){
+ const calendarDF = new DateFilter("#calendar_filter_btn", "Tous les champs du filtre de date doivent être remplis", "#q_contains_date_NUMi")
+ calendarDF()
+})
diff --git a/app/assets/javascripts/filters/import.js b/app/assets/javascripts/filters/import.js
new file mode 100644
index 000000000..bb665d5ad
--- /dev/null
+++ b/app/assets/javascripts/filters/import.js
@@ -0,0 +1,6 @@
+const DateFilter = require('../helpers/date_filters')
+
+$(document).ready(function(){
+ const importDF = new DateFilter("#import_filter_btn", "Tous les champs du filtre de date doivent être remplis", "#q_started_at_begin_NUMi", "#q_started_at_end_NUMi")
+ importDF()
+})
diff --git a/app/assets/javascripts/filters/time_table.js b/app/assets/javascripts/filters/time_table.js
new file mode 100644
index 000000000..9e24d03fe
--- /dev/null
+++ b/app/assets/javascripts/filters/time_table.js
@@ -0,0 +1,7 @@
+$(document).ready(function(){
+ const DateFilter = require('../helpers/date_filters')
+
+ const timetableDF = new DateFilter("#time_table_filter_btn", window.I18n.fr.time_tables.error_period_filter, "#q_start_date_gteq_NUMi", "#q_end_date_lteq_NUMi")
+
+ timetableDF()
+})
diff --git a/app/assets/javascripts/filters/workbench.js b/app/assets/javascripts/filters/workbench.js
new file mode 100644
index 000000000..af3e13c59
--- /dev/null
+++ b/app/assets/javascripts/filters/workbench.js
@@ -0,0 +1,6 @@
+const DateFilter = require('../helpers/date_filters')
+
+$(document).ready(function(){
+ const workbenchDF = new DateFilter("#referential_filter_btn", window.I18n.fr.referentials.error_period_filter, "#q_validity_period_begin_gteq_NUMi", "#q_validity_period_end_lteq_NUMi")
+ workbenchDF()
+})
diff --git a/app/assets/javascripts/helpers/date_filters.js b/app/assets/javascripts/helpers/date_filters.js
new file mode 100644
index 000000000..1f48bb28f
--- /dev/null
+++ b/app/assets/javascripts/helpers/date_filters.js
@@ -0,0 +1,38 @@
+const DateFilter = function(buttonId, message, ...inputIds) {
+ this.buttonId = buttonId
+ this.inputIds = inputIds
+ this.message = message
+
+ const getVal = (str, key) => {
+ let newStr = str.replace(/NUM/, key)
+ return $(newStr).val()
+ }
+
+ const getDates = () => {
+ return this.inputIds.reduce((arr, id) => {
+ let newIds = [1, 2, 3].map(key => getVal(id, key))
+ arr.push(...newIds)
+ return arr
+ },[])
+ }
+
+ const allInputFilled = () => {
+ return getDates().every(date => !!date)
+ }
+
+ const noInputFilled = () => {
+ return getDates().every(date => !date)
+ }
+
+ const execute = () => {
+ $(this.buttonId).on("click", (e) => {
+ if (allInputFilled() == false && noInputFilled() == false) {
+ e.preventDefault()
+ alert(this.message)
+ }
+ })
+ }
+ return execute
+}
+
+module.exports = DateFilter
diff --git a/app/assets/javascripts/routes.coffee b/app/assets/javascripts/routes.coffee
index 2e36061b8..4492b381d 100644
--- a/app/assets/javascripts/routes.coffee
+++ b/app/assets/javascripts/routes.coffee
@@ -1,5 +1,5 @@
$(document).on("change", '#route_wayback', (e) ->
- way = if $(this).is(':checked') then "backward" else "straight_forward"
+ way = if $(this).is(':checked') then "inbound" else "outbound"
$('.opposite_route').hide().find('select').prop('disabled', true)
field = $(".opposite_route.#{way}")
diff --git a/app/assets/javascripts/time_table.coffee b/app/assets/javascripts/time_table.coffee
deleted file mode 100644
index 8789cb226..000000000
--- a/app/assets/javascripts/time_table.coffee
+++ /dev/null
@@ -1,14 +0,0 @@
- $(document).on("click", "#time_table_filter_btn", (e) ->
- dates = [1, 2, 3].reduce (arr, key) ->
- arr.push $("#q_start_date_gteq_#{key}i").val(), $("#q_end_date_lteq_#{key}i").val()
- arr
- , []
-
- validDate = dates.every (date) -> !!date
-
- noDate = dates.every (date) -> !date
-
- unless (validDate || noDate)
- e.preventDefault()
- alert(window.I18n.fr.time_tables.error_period_filter)
- )
diff --git a/app/assets/javascripts/workbench.coffee b/app/assets/javascripts/workbench.coffee
deleted file mode 100644
index 0e9fe62a3..000000000
--- a/app/assets/javascripts/workbench.coffee
+++ /dev/null
@@ -1,18 +0,0 @@
- $(document).on("click", "#referential_filter_btn", (e) ->
- dates = [1, 2, 3].reduce (arr, key) ->
- arr.push $("#q_validity_period_begin_gteq_#{key}i").val(), $("#q_validity_period_end_lteq_#{key}i").val()
- arr
- , []
-
- validDate = dates.every (date) -> !!date
-
- noDate = dates.every (date) -> !date
-
- console.log("valid dates :", validDate)
- console.log("no dates :", noDate)
- console.log(dates)
-
- unless (validDate || noDate)
- e.preventDefault()
- alert(window.I18n.fr.referentials.error_period_filter)
- )