aboutsummaryrefslogtreecommitdiffstats
path: root/app/assets
diff options
context:
space:
mode:
authorcedricnjanga2017-08-24 18:02:44 +0200
committercedricnjanga2017-08-24 18:03:10 +0200
commit1d7db2b6c254ac55105c08ee177580036b0377f3 (patch)
treea225c4d9fb9275a4de405640db0b091cbb6f09b0 /app/assets
parenta783663e1d9dffaef116f48820008927695095a4 (diff)
downloadchouette-core-1d7db2b6c254ac55105c08ee177580036b0377f3.tar.bz2
Edit VJ to enable shift and to go past midnight (DayOffset)
Diffstat (limited to 'app/assets')
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js91
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/DuplicateVehicleJourney.js67
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/ShiftVehicleJourney.js25
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/containers/tools/DuplicateVehicleJourney.js4
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/index.js12
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/reducers/vehicleJourneys.js19
6 files changed, 106 insertions, 112 deletions
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
index 0b35591b2..2fde0d76f 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 : () => ({
@@ -394,7 +395,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 +429,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 +442,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..780b10916 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,29 +7,54 @@ var _ = require('lodash')
class DuplicateVehicleJourney extends Component {
constructor(props) {
super(props)
+ this.state = {}
+ this.onFormChange = this.onFormChange.bind(this)
+ }
+
+ componentWillReceiveProps() {
+ if (actions.getSelected(this.props.vehicleJourneys).length > 0) {
+ this.setState((state, props) => {
+ return {
+ duplicate_time_hh: parseInt(this.getDefaultValue('hour')),
+ duplicate_time_mm: parseInt(this.getDefaultValue('minute')),
+ 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
}
@@ -65,22 +90,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 +121,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 +136,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,7 +164,7 @@ class DuplicateVehicleJourney 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/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/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/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
index 53bbcf952..7872899dc 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/index.js
@@ -8,10 +8,10 @@ var actions = require("./actions")
var enableBatching = require('./batch').enableBatching
// logger, DO NOT REMOVE
-// var applyMiddleware = require('redux').applyMiddleware
-// var createLogger = require('redux-logger')
-// var thunkMiddleware = require('redux-thunk').default
-// var promise = require('redux-promise')
+var applyMiddleware = require('redux').applyMiddleware
+var createLogger = require('redux-logger')
+var thunkMiddleware = require('redux-thunk').default
+var promise = require('redux-promise')
var selectedJP = []
@@ -86,12 +86,12 @@ if (window.jpOrigin){
initialState.filters.queryString = actions.encodeParams(params)
}
-// const loggerMiddleware = createLogger()
+const loggerMiddleware = createLogger()
let store = createStore(
enableBatching(vehicleJourneysApp),
initialState,
- // applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
+ applyMiddleware(thunkMiddleware, promise, loggerMiddleware)
)
render(
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..d397e7632 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,13 @@ 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++){
+ action.addtionalTime = (val * (i + 1)) + departureDelta
dupeVj = vehicleJourney(vj, action, false)
dupeVj.published_journey_name = dupeVj.published_journey_name + '-' + i
dupeVj.selected = false