fix: properly translate schedule start date to current recurring time
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStationUtils.ts
index 090ca65d1edcec3648c4fe9f6b3502d3e9097ae6..1dffb0377949d4dc72dff8d84e2ec1235ff7161e 100644 (file)
@@ -8,14 +8,14 @@ import {
   addDays,
   addSeconds,
   addWeeks,
+  differenceInDays,
+  differenceInWeeks,
+  endOfDay,
   endOfWeek,
   isAfter,
   isBefore,
-  isTomorrow,
-  isYesterday,
+  startOfDay,
   startOfWeek,
-  subDays,
-  subWeeks,
 } from 'date-fns';
 
 import type { ChargingStation } from './ChargingStation';
@@ -691,21 +691,23 @@ const getLimitFromChargingProfiles = (
       );
       chargingSchedule.startSchedule = convertToDate(chargingSchedule.startSchedule)!;
     }
-    // Adjust recurring schedule
+    // Adjust recurring start schedule
     if (chargingProfile.chargingProfileKind === ChargingProfileKindType.RECURRING) {
       switch (chargingProfile.recurrencyKind) {
         case RecurrencyKindType.DAILY:
-          if (isYesterday(chargingSchedule.startSchedule)) {
-            addDays(chargingSchedule.startSchedule, 1);
-          } else if (isTomorrow(chargingSchedule.startSchedule)) {
-            subDays(chargingSchedule.startSchedule, 1);
+          if (isBefore(chargingSchedule.startSchedule, startOfDay(currentDate))) {
+            addDays(
+              chargingSchedule.startSchedule,
+              differenceInDays(chargingSchedule.startSchedule, endOfDay(currentDate)),
+            );
           }
           break;
         case RecurrencyKindType.WEEKLY:
           if (isBefore(chargingSchedule.startSchedule, startOfWeek(currentDate))) {
-            addWeeks(chargingSchedule.startSchedule, 1);
-          } else if (isAfter(chargingSchedule.startSchedule, endOfWeek(currentDate))) {
-            subWeeks(chargingSchedule.startSchedule, 1);
+            addWeeks(
+              chargingSchedule.startSchedule,
+              differenceInWeeks(chargingSchedule.startSchedule, endOfWeek(currentDate)),
+            );
           }
           break;
       }