From a6b650b3f4f4dda08d17299622ee67d704509465 Mon Sep 17 00:00:00 2001
From: Zog
Date: Thu, 3 May 2018 16:59:20 +0200
Subject: Refs #6884; Allow for overnight stops
As long as one arrives after 11pm and leaves before 1am
---
 app/javascript/vehicle_journeys/actions/index.js      | 19 ++++++++++++-------
 .../vehicle_journeys/components/VehicleJourney.js     | 10 +---------
 .../vehicle_journeys/reducers/vehicleJourneys.js      | 14 ++++++++++++--
 3 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/app/javascript/vehicle_journeys/actions/index.js b/app/javascript/vehicle_journeys/actions/index.js
index 60496e0ff..98594083d 100644
--- a/app/javascript/vehicle_journeys/actions/index.js
+++ b/app/javascript/vehicle_journeys/actions/index.js
@@ -489,23 +489,28 @@ const actions = {
     }
     return 0
   },
-  getDelta: (vjas) => {
+  getDelta: (vjas, allowNegative=false) => {
     let delta = 0
     if (vjas.departure_time.hour != '' && vjas.departure_time.minute != '' && vjas.arrival_time.hour != '' && vjas.departure_time.minute != ''){
       delta = (parseInt(vjas.departure_time.hour) - parseInt(vjas.arrival_time.hour)) * 60 + (parseInt(vjas.departure_time.minute) - parseInt(vjas.arrival_time.minute))
     }
+    if(!true && delta < 0){
+      delta += 24*60
+    }
     vjas.delta = delta
     return vjas
   },
   adjustSchedule: (action, schedule, enforceConsistency=false) => {
     // we enforce that the departure time remains after the arrival time
-    actions.getDelta(schedule)
+    actions.getDelta(schedule, true)
     if(enforceConsistency && schedule.delta < 0){
-      if(action.isDeparture){
-        schedule.arrival_time = schedule.departure_time
-      }
-      else{
-        schedule.departure_time = schedule.arrival_time
+      if(schedule.arrival_time.hour < 23 || schedule.departure_time.hour > 0){
+        if(action.isDeparture){
+          schedule.arrival_time = schedule.departure_time
+        }
+        else{
+          schedule.departure_time = schedule.arrival_time
+        }
       }
       actions.getDelta(schedule)
     }
diff --git a/app/javascript/vehicle_journeys/components/VehicleJourney.js b/app/javascript/vehicle_journeys/components/VehicleJourney.js
index f7ae9341f..46d300e6e 100644
--- a/app/javascript/vehicle_journeys/components/VehicleJourney.js
+++ b/app/javascript/vehicle_journeys/components/VehicleJourney.js
@@ -192,20 +192,16 @@ export default class VehicleJourney extends Component {
                   
                      {this.props.onUpdateTime(e, i, this.props.index, 'hour', false, false)}}
-                      onChange={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', false, false, true)}}
+                      onBlur={(e) => {this.props.onUpdateTime(e, i, this.props.index, 'hour', false, false, true)}}
                       value={vj.arrival_time['hour']}
                       />
                     :
                     
                     :
                      {
       return _.assign({}, state, {vehicle_journey_at_stops: shiftedArray})
     case 'UPDATE_TIME':
       let vj, vjas, vjasArray, newSchedule
+      let val = action.val
+      if(val != ''){
+        val = parseInt(val)
+        if(action.timeUnit == "minute"){
+          val = (val + 60) % 60
+        }
+        else{
+          val = (val + 24) % 24
+        }
+      }
       vjasArray = state.vehicle_journey_at_stops.map((vjas, i) =>{
         if(i == action.subIndex){
           newSchedule = {
@@ -157,13 +167,13 @@ const vehicleJourney= (state = {}, action, keep) => {
             arrival_time: _.assign({}, vjas.arrival_time)
           }
           if (action.isDeparture){
-            newSchedule.departure_time[action.timeUnit] = actions.pad(action.val, action.timeUnit)
+            newSchedule.departure_time[action.timeUnit] = actions.pad(val, action.timeUnit)
             if(!action.isArrivalsToggled)
               newSchedule.arrival_time[action.timeUnit] = newSchedule.departure_time[action.timeUnit]
             newSchedule = actions.adjustSchedule(action, newSchedule, action.enforceConsistency)
             return _.assign({}, state.vehicle_journey_at_stops[action.subIndex], {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})
           }else{
-            newSchedule.arrival_time[action.timeUnit] = actions.pad(action.val, action.timeUnit)
+            newSchedule.arrival_time[action.timeUnit] = actions.pad(val, action.timeUnit)
             newSchedule = actions.adjustSchedule(action, newSchedule, action.enforceConsistency)
             return _.assign({}, state.vehicle_journey_at_stops[action.subIndex],  {arrival_time: newSchedule.arrival_time, departure_time: newSchedule.departure_time, delta: newSchedule.delta})
           }
-- 
cgit v1.2.3