diff options
Diffstat (limited to 'app/assets/javascripts')
10 files changed, 58 insertions, 28 deletions
diff --git a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js index 1a6c67b6b..a8a92c522 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js +++ b/app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js @@ -61,30 +61,30 @@ const PeriodForm = ({modal, timetable, metas, onOpenAddPeriodForm, onClosePeriod <div className="nested-fields"> <div className="wrapper"> <div> - <div className={'form-group date' + (modal.modalProps.error ? ' has-error' : '')}> + <div className={'form-group date smart_date' + (modal.modalProps.error ? ' has-error' : '')}> <div className="form-inline"> - <select value={formatNumber(modal.modalProps.begin.day)} onChange={(e) => onUpdatePeriodForm(e.currentTarget.value, 'begin', 'day')} id="q_validity_period_begin_gteq_3i" className="date required form-control"> + <select value={formatNumber(modal.modalProps.begin.day)} onChange={(e) => onUpdatePeriodForm(e, 'begin', 'day')} id="q_validity_period_begin_gteq_3i" className="date required form-control"> {makeDaysOptions(modal.modalProps.begin.day)} </select> - <select value={formatNumber(modal.modalProps.begin.month)} onChange={(e) => onUpdatePeriodForm(e.currentTarget.value, 'begin', 'month')} id="q_validity_period_begin_gteq_2i" className="date required form-control"> + <select value={formatNumber(modal.modalProps.begin.month)} onChange={(e) => onUpdatePeriodForm(e, 'begin', 'month')} id="q_validity_period_begin_gteq_2i" className="date required form-control"> {makeMonthsOptions(modal.modalProps.begin.month)} </select> - <select value={modal.modalProps.begin.year} onChange={(e) => onUpdatePeriodForm(e.currentTarget.value, 'begin', 'year')} id="q_validity_period_begin_gteq_1i" className="date required form-control"> + <select value={modal.modalProps.begin.year} onChange={(e) => onUpdatePeriodForm(e, 'begin', 'year')} id="q_validity_period_begin_gteq_1i" className="date required form-control"> {makeYearsOptions(modal.modalProps.begin.year)} </select> </div> </div> </div> <div> - <div className={'form-group date' + (modal.modalProps.error ? ' has-error' : '')}> + <div className={'form-group date smart_date' + (modal.modalProps.error ? ' has-error' : '')}> <div className="form-inline"> - <select value={formatNumber(modal.modalProps.end.day)} onChange={(e) => onUpdatePeriodForm(e.currentTarget.value, 'end', 'day')} id="q_validity_period_end_gteq_3i" className="date required form-control"> + <select value={formatNumber(modal.modalProps.end.day)} onChange={(e) => onUpdatePeriodForm(e, 'end', 'day')} id="q_validity_period_end_gteq_3i" className="date required form-control"> {makeDaysOptions(modal.modalProps.end.day)} </select> - <select value={formatNumber(modal.modalProps.end.month)} onChange={(e) => onUpdatePeriodForm(e.currentTarget.value, 'end', 'month')} id="q_validity_period_end_gteq_2i" className="date required form-control"> + <select value={formatNumber(modal.modalProps.end.month)} onChange={(e) => onUpdatePeriodForm(e, 'end', 'month')} id="q_validity_period_end_gteq_2i" className="date required form-control"> {makeMonthsOptions(modal.modalProps.end.month)} </select> - <select value={modal.modalProps.end.year} onChange={(e) => onUpdatePeriodForm(e.currentTarget.value, 'end', 'year')} id="q_validity_period_end_gteq_1i" className="date required form-control"> + <select value={modal.modalProps.end.year} onChange={(e) => onUpdatePeriodForm(e, 'end', 'year')} id="q_validity_period_end_gteq_1i" className="date required form-control"> {makeYearsOptions(modal.modalProps.end.year)} </select> </div> 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 b6004c7f1..a7edbc328 100644 --- a/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js +++ b/app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js @@ -18,8 +18,10 @@ const mapDispatchToProps = (dispatch) => { onClosePeriodForm: () => { dispatch(actions.closePeriodForm()) }, - onUpdatePeriodForm: (val, group, selectType) => { - dispatch(actions.updatePeriodForm(val, group, selectType)) + onUpdatePeriodForm: (e, group, selectType) => { + dispatch(actions.updatePeriodForm(e.currentTarget.value, group, selectType)) + let selector = '#q_validity_period_' + group + '_gteq_3i' + dispatch(actions.updatePeriodForm($(selector).val(), group, 'day')) }, onValidatePeriodForm: (modalProps, timeTablePeriods, metas) => { dispatch(actions.validatePeriodForm(modalProps, timeTablePeriods, metas)) 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 0af1bb53d..e90d2d307 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js @@ -134,9 +134,10 @@ const actions = { type: 'SHIFT_VEHICLEJOURNEY', data }), - duplicateVehicleJourney : (data) => ({ + duplicateVehicleJourney : (data, departureDelta) => ({ type: 'DUPLICATE_VEHICLEJOURNEY', - data + data, + departureDelta }), deleteVehicleJourneys : () => ({ type: 'DELETE_VEHICLEJOURNEYS' @@ -458,20 +459,20 @@ const actions = { schedule.arrival_time.hour = parseInt(schedule.arrival_time.hour) + hours } - if(schedule.departure_time.hour > 23){ + if(parseInt(schedule.departure_time.hour) > 23){ schedule.departure_time.hour = '23' schedule.departure_time.minute = '59' } - if(schedule.arrival_time.hour > 23){ + if(parseInt(schedule.arrival_time.hour) > 23){ schedule.arrival_time.hour = '23' schedule.arrival_time.minute = '59' } - if(schedule.departure_time.hour < 0){ + if(parseInt(schedule.departure_time.hour) < 0){ schedule.departure_time.hour = '00' schedule.departure_time.minute = '00' } - if(schedule.arrival_time.hour > 23){ + if(parseInt(schedule.arrival_time.hour) < 0){ schedule.arrival_time.hour = '00' schedule.arrival_time.minute = '00' } 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 0cf102693..aa1a13b11 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 @@ -18,8 +18,8 @@ class DuplicateVehicleJourney extends Component { } } 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) + val - this.props.onDuplicateVehicleJourney(this.refs) + this.refs.additional_time.value = parseInt(this.refs.additional_time.value) + this.props.onDuplicateVehicleJourney(this.refs, val) this.props.onModalClose() $('#DuplicateVehicleJourneyModal').modal('hide') } @@ -51,10 +51,9 @@ class DuplicateVehicleJourney extends Component { <div className='modal-dialog'> <div className='modal-content'> <div className='modal-header'> - <h4 className='modal-title'>Dupliquer une course</h4> - {(this.props.modal.type == 'duplicate') && ( - <em>Dupliquer les horaires de la course {actions.humanOID(actions.getSelected(this.props.vehicleJourneys)[0].objectid)}</em> - )} + <h4 className='modal-title'> + Dupliquer { actions.getSelected(this.props.vehicleJourneys).length > 1 ? 'plusieurs courses' : 'une course' } + </h4> </div> {(this.props.modal.type == 'duplicate') && ( diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js index 932c56532..9919ee9dd 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js @@ -70,7 +70,7 @@ class EditVehicleJourney extends Component { <input type='text' className='form-control' - value={(this.props.modal.modalProps.vehicleJourney.journey_pattern.objectid) + ' - ' + (this.props.modal.modalProps.vehicleJourney.journey_pattern.name)} + value={actions.humanOID(this.props.modal.modalProps.vehicleJourney.journey_pattern.objectid) + ' - ' + (this.props.modal.modalProps.vehicleJourney.journey_pattern.name)} disabled={true} /> </div> 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 ee7d01cf5..2164344c2 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 @@ -40,7 +40,7 @@ class ShiftVehicleJourney extends Component { <div className='modal-header'> <h4 className='modal-title'>Mettre à jour une course</h4> {(this.props.modal.type == 'shift') && ( - <em>Mettre à jour les horaires de la course {actions.getSelected(this.props.vehicleJourneys)[0].objectid}</em> + <em>Mettre à jour les horaires de la course {actions.humanOID(actions.getSelected(this.props.vehicleJourneys)[0].objectid)}</em> )} </div> @@ -57,6 +57,7 @@ class ShiftVehicleJourney extends Component { min='-59' max='59' className='form-control' + defaultValue='0' onKeyDown={(e) => actions.resetValidation(e.currentTarget)} required /> 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 6cf6f4039..224b52a19 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) =>{ - dispatch(actions.duplicateVehicleJourney(data)) + onDuplicateVehicleJourney: (data, departureDelta) =>{ + dispatch(actions.duplicateVehicleJourney(data, departureDelta)) } } } 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 09588f824..b4a70ec08 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/filters.js @@ -15,7 +15,7 @@ const filters = (state = {}, action) => { minute: '59' } } - newQuery = _.assign({}, state.query, {interval: interval, journeyPattern: {}, vehicleJourney: {}, timetable: {}, withoutSchedule: true, withoutTimeTable: false }) + newQuery = _.assign({}, state.query, {interval: interval, journeyPattern: {}, vehicleJourney: {}, timetable: {}, withoutSchedule: true, withoutTimeTable: true }) return _.assign({}, state, {query: newQuery, queryString: ''}) case 'TOGGLE_WITHOUT_SCHEDULE': newQuery = _.assign({}, state.query, {withoutSchedule: !state.query.withoutSchedule}) 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 c7e8d58e7..d463d4b8f 100644 --- a/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js +++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js @@ -182,11 +182,12 @@ const vehicleJourneys = (state = [], action) => { let dupes = [] let selectedIndex let val = action.data.additional_time.value + 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 = val * (i + 1) + action.data.additional_time.value = (parseInt(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/smart_date.coffee b/app/assets/javascripts/smart_date.coffee new file mode 100644 index 000000000..afc0c7ddf --- /dev/null +++ b/app/assets/javascripts/smart_date.coffee @@ -0,0 +1,26 @@ +window.legalDaysPerMonth = + false: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + true: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] + + +window.legal +window.correctDay = (dateValues) -> + [day, month, year] = dateValues + return day unless day > 0 && month > 0 && year > 0 + + legallyMaximumDay = legalDaysPerMonth[isLeapYear(year)][month - 1] + Math.min day, legallyMaximumDay + +window.isLeapYear = (year) -> + (year % 4 == 0) && ((year % 400 == 0) || (year % 100 != 0)) + +window.smartCorrectDate = -> + allSelectors = $(@).parent().children('select') + allVals = allSelectors.map (index, sel) -> + parseInt($(sel).val()) + correctedDay = correctDay allVals + daySelector = allSelectors.first() + $(daySelector).val(correctedDay) + +$ -> + $(document).on 'change', '.smart_date select', smartCorrectDate |
