docs: refine README
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStation.ts
index fc6a409adfc006c7200bc600441f83c8ebeb1490..726a2ce9fc63ee06253dc379d003930f9a791888 100644 (file)
@@ -933,25 +933,15 @@ export class ChargingStation {
   public async addReservation(reservation: Reservation): Promise<void> {
     const [exists, reservationFound] = this.doesReservationExists(reservation);
     if (exists) {
-      await this.removeReservation(reservationFound);
+      await this.removeReservation(reservationFound, ReservationTerminationReason.REPLACE_EXISTING);
     }
-    const connectorStatus = this.getConnectorStatus(reservation.connectorId);
-    connectorStatus.reservation = reservation;
-    connectorStatus.status = ConnectorStatusEnum.Reserved;
-    if (reservation.connectorId === 0) {
-      return;
-    }
-    await this.ocppRequestService.requestHandler<
-      StatusNotificationRequest,
-      StatusNotificationResponse
-    >(
+    this.getConnectorStatus(reservation.connectorId).reservation = reservation;
+    await OCPPServiceUtils.sendAndSetConnectorStatus(
       this,
-      RequestCommand.STATUS_NOTIFICATION,
-      OCPPServiceUtils.buildStatusNotificationRequest(
-        this,
-        reservation.connectorId,
-        ConnectorStatusEnum.Reserved
-      )
+      reservation.connectorId,
+      ConnectorStatusEnum.Reserved,
+      null,
+      { send: reservation.connectorId !== 0 }
     );
   }
 
@@ -961,35 +951,26 @@ export class ChargingStation {
   ): Promise<void> {
     const connector = this.getConnectorStatus(reservation.connectorId);
     switch (reason) {
-      case ReservationTerminationReason.TRANSACTION_STARTED: {
+      case ReservationTerminationReason.CONNECTOR_STATE_CHANGED:
         delete connector.reservation;
-        if (reservation.connectorId === 0) {
-          connector.status = ConnectorStatusEnum.Available;
-        }
         break;
-      }
-      case ReservationTerminationReason.CONNECTOR_STATE_CHANGED: {
+      case ReservationTerminationReason.TRANSACTION_STARTED:
         delete connector.reservation;
         break;
-      }
-      default: {
-        // ReservationTerminationReason.EXPIRED, ReservationTerminationReason.CANCELED
-        connector.status = ConnectorStatusEnum.Available;
-        delete connector.reservation;
-        await this.ocppRequestService.requestHandler<
-          StatusNotificationRequest,
-          StatusNotificationResponse
-        >(
+      case ReservationTerminationReason.RESERVATION_CANCELED ||
+        ReservationTerminationReason.REPLACE_EXISTING ||
+        ReservationTerminationReason.EXPIRED:
+        await OCPPServiceUtils.sendAndSetConnectorStatus(
           this,
-          RequestCommand.STATUS_NOTIFICATION,
-          OCPPServiceUtils.buildStatusNotificationRequest(
-            this,
-            reservation.connectorId,
-            ConnectorStatusEnum.Available
-          )
+          reservation.connectorId,
+          ConnectorStatusEnum.Available,
+          null,
+          { send: reservation.connectorId !== 0 }
         );
+        delete connector.reservation;
+        break;
+      default:
         break;
-      }
     }
   }
 
@@ -1032,14 +1013,20 @@ export class ChargingStation {
         for (const evse of this.evses.values()) {
           for (const connector of evse.connectors.values()) {
             if (connector?.reservation?.expiryDate.toString() < new Date().toISOString()) {
-              await this.removeReservation(connector.reservation);
+              await this.removeReservation(
+                connector.reservation,
+                ReservationTerminationReason.EXPIRED
+              );
             }
           }
         }
       } else {
         for (const connector of this.connectors.values()) {
           if (connector?.reservation?.expiryDate.toString() < new Date().toISOString()) {
-            await this.removeReservation(connector.reservation);
+            await this.removeReservation(
+              connector.reservation,
+              ReservationTerminationReason.EXPIRED
+            );
           }
         }
       }