aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZog2018-02-21 16:42:04 +0100
committerZog2018-02-21 16:42:04 +0100
commit020c42f3e5046377c71daab0e57abdbb1809bf0f (patch)
tree83b7015f3d78c83636dcef2277d4199b1b502045
parentd718159ff008c25ab7d51c6714444bd7bd24a77d (diff)
downloadchouette-core-020c42f3e5046377c71daab0e57abdbb1809bf0f.tar.bz2
Refs #5942; Apply users TZ when computing a schedule5942-apply-user-tz
-rw-r--r--app/javascript/vehicle_journeys/components/tools/CreateModal.js5
-rw-r--r--app/javascript/vehicle_journeys/reducers/vehicleJourneys.js9
-rw-r--r--spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js111
3 files changed, 123 insertions, 2 deletions
diff --git a/app/javascript/vehicle_journeys/components/tools/CreateModal.js b/app/javascript/vehicle_journeys/components/tools/CreateModal.js
index 8536f66e6..24d9a23c2 100644
--- a/app/javascript/vehicle_journeys/components/tools/CreateModal.js
+++ b/app/javascript/vehicle_journeys/components/tools/CreateModal.js
@@ -117,6 +117,11 @@ export default class CreateModal extends Component {
className='form-control'
onKeyDown={(e) => actions.resetValidation(e.currentTarget)}
/>
+ <input
+ type='hidden'
+ ref='tz_offset'
+ value={new Date().getTimezoneOffset()}
+ />
</div>
</div>
</div>
diff --git a/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js b/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js
index 507e0ea91..8705b3cf2 100644
--- a/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js
+++ b/app/javascript/vehicle_journeys/reducers/vehicleJourneys.js
@@ -15,10 +15,15 @@ const vehicleJourney= (state = {}, action, keep) => {
minute: 0
}
let computeSchedule = false
+ let userTZOffet = 0
if(action.data["start_time.hour"] && action.data["start_time.hour"].value && action.data["start_time.hour"].value.length > 0 && action.data["start_time.minute"] && action.selectedJourneyPattern.full_schedule && action.selectedJourneyPattern.costs){
computeSchedule = true
- current_time.hour = parseInt(action.data["start_time.hour"].value)
- current_time.minute = parseInt(action.data["start_time.minute"].value) || 0
+ userTZOffet = action.data["tz_offset"] && parseInt(action.data["tz_offset"].value) || 0
+ current_time.hour = parseInt(action.data["start_time.hour"].value) + parseInt(userTZOffet / 60)
+ current_time.minute = 0
+ if(action.data["start_time.minute"].value){
+ current_time.minute = parseInt(action.data["start_time.minute"].value) + (userTZOffet - 60 * parseInt(userTZOffet / 60))
+ }
}
_.each(action.stopPointsList, (sp) =>{
let inJourney = false
diff --git a/spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js b/spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js
index d5a35bdc1..608115727 100644
--- a/spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js
+++ b/spec/javascript/vehicle_journeys/reducers/vehicleJourneys_spec.js
@@ -241,6 +241,117 @@ describe('vehicleJourneys reducer', () => {
}, ...state])
})
+ it('should handle ADD_VEHICLEJOURNEY with a start time and a fully timed JP, and use user\'s TZ', () => {
+ let pristineVjasList = [{
+ delta : 0,
+ arrival_time : {
+ hour: 21,
+ minute: 54
+ },
+ departure_time : {
+ hour: 21,
+ minute: 54
+ },
+ stop_point_objectid: 'test-1',
+ stop_area_cityname: 'city',
+ dummy: false
+ },
+ {
+ delta : 0,
+ arrival_time : {
+ hour: 21,
+ minute: 57
+ },
+ departure_time : {
+ hour: 22,
+ minute: 7
+ },
+ stop_point_objectid: 'test-2',
+ stop_area_cityname: 'city',
+ dummy: false
+ },
+ {
+ delta : 0,
+ arrival_time : {
+ hour: "00",
+ minute: "00"
+ },
+ departure_time : {
+ hour: "00",
+ minute: "00"
+ },
+ stop_point_objectid: 'test-3',
+ stop_area_cityname: 'city',
+ dummy: true
+ },
+ {
+ delta : 0,
+ arrival_time : {
+ hour: 23,
+ minute: 37
+ },
+ departure_time : {
+ hour: 23,
+ minute: 37
+ },
+ stop_point_objectid: 'test-4',
+ stop_area_cityname: 'city',
+ dummy: false
+ }]
+ let fakeData = {
+ published_journey_name: {value: 'test'},
+ published_journey_identifier: {value : ''},
+ "start_time.hour": {value : '22'},
+ "start_time.minute": {value : '59'},
+ "tz_offset": {value : '-65'}
+ }
+ let fakeSelectedJourneyPattern = {
+ id: "1",
+ full_schedule: true,
+ stop_areas: [
+ {stop_area_short_description: {id: 1}},
+ {stop_area_short_description: {id: 2}},
+ {stop_area_short_description: {id: 4}},
+ ],
+ costs: {
+ "1-2": {
+ distance: 10,
+ time: 63
+ },
+ "2-4": {
+ distance: 10,
+ time: 30
+ }
+ }
+ }
+ let fakeSelectedCompany = {name: "ALBATRANS"}
+ expect(
+ vjReducer(state, {
+ type: 'ADD_VEHICLEJOURNEY',
+ data: fakeData,
+ selectedJourneyPattern: fakeSelectedJourneyPattern,
+ stopPointsList: [{object_id: 'test-1', city_name: 'city', stop_area_id: 1, id: 1, time_zone_offset: 0, waiting_time: null}, {object_id: 'test-2', city_name: 'city', stop_area_id: 2, id: 2, time_zone_offset: -3600, waiting_time: 10}, {object_id: 'test-3', city_name: 'city', stop_area_id: 3, id: 3, time_zone_offset: 0, waiting_time: 20}, {object_id: 'test-4', city_name: 'city', stop_area_id: 4, id: 4, time_zone_offset: 0}],
+ selectedCompany: fakeSelectedCompany
+ })
+ ).toEqual([{
+ journey_pattern: fakeSelectedJourneyPattern,
+ company: fakeSelectedCompany,
+ published_journey_name: 'test',
+ published_journey_identifier: '',
+ short_id: '',
+ objectid: '',
+ footnotes: [],
+ time_tables: [],
+ purchase_windows: [],
+ vehicle_journey_at_stops: pristineVjasList,
+ selected: false,
+ custom_fields: undefined,
+ deletable: false,
+ transport_mode: 'undefined',
+ transport_submode: 'undefined'
+ }, ...state])
+ })
+
it('should handle ADD_VEHICLEJOURNEY with a start time and a fully timed JP but no time is set', () => {
let pristineVjasList = [{
delta : 0,