diff options
| author | cedricnjanga | 2017-09-19 15:56:09 +0200 |
|---|---|---|
| committer | cedricnjanga | 2017-09-19 15:56:09 +0200 |
| commit | d0703700f5b5e663739e9897c04c2136c953fa7e (patch) | |
| tree | 91b9cbf1568556ae65162fec2fe23b1ea58da784 /app/assets/javascripts | |
| parent | efa8b6072e35f09d580f227b0b3175260c145fea (diff) | |
| parent | 5ffc337dfc86017840a5402058d490fd20d29bf4 (diff) | |
| download | chouette-core-d0703700f5b5e663739e9897c04c2136c953fa7e.tar.bz2 | |
Resolve merge conflicts
Diffstat (limited to 'app/assets/javascripts')
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) - ) |
