aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/components/PeriodForm.js16
-rw-r--r--app/assets/javascripts/es6_browserified/time_tables/containers/PeriodForm.js6
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js13
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js11
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/EditVehicleJourney.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js3
-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/filters.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js3
-rw-r--r--app/assets/javascripts/smart_date.coffee26
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