cloneObject,
convertToDate,
convertToInt,
+ isArraySorted,
isEmptyObject,
isEmptyString,
isNotEmptyArray,
})
) {
if (isNotEmptyArray(chargingSchedule.chargingSchedulePeriod)) {
- chargingSchedule.chargingSchedulePeriod.sort((a, b) => a.startPeriod - b.startPeriod);
+ const chargingSchedulePeriodCompareFn = (
+ a: ChargingSchedulePeriod,
+ b: ChargingSchedulePeriod,
+ ) => a.startPeriod - b.startPeriod;
+ if (
+ isArraySorted<ChargingSchedulePeriod>(
+ chargingSchedule.chargingSchedulePeriod,
+ chargingSchedulePeriodCompareFn,
+ ) === false
+ ) {
+ logger.warn(
+ `${logPrefix} ${moduleName}.getLimitFromChargingProfiles: Charging profile id ${chargingProfile.chargingProfileId} schedule periods are not sorted by start period`,
+ );
+ chargingSchedule.chargingSchedulePeriod.sort(chargingSchedulePeriodCompareFn);
+ }
// Check if the first schedule period start period is equal to 0
if (chargingSchedule.chargingSchedulePeriod[0].startPeriod !== 0) {
logger.error(
(index < chargingSchedule.chargingSchedulePeriod.length - 1 &&
chargingSchedule.duration! >
differenceInSeconds(
- chargingSchedule.startSchedule!,
addSeconds(
chargingSchedule.startSchedule!,
chargingSchedule.chargingSchedulePeriod[index + 1].startPeriod,
),
+ chargingSchedule.startSchedule!,
))
) {
const result: ChargingProfilesLimit = {
) {
chargingSchedule.startSchedule = addDays(
chargingSchedule.startSchedule!,
- differenceInDays(chargingSchedule.startSchedule!, recurringInterval.end),
+ differenceInDays(currentDate, recurringInterval.start),
);
recurringInterval = {
start: chargingSchedule.startSchedule,
) {
chargingSchedule.startSchedule = addWeeks(
chargingSchedule.startSchedule!,
- differenceInWeeks(chargingSchedule.startSchedule!, recurringInterval.end),
+ differenceInWeeks(currentDate, recurringInterval.start),
);
recurringInterval = {
start: chargingSchedule.startSchedule,