- public removeReservation(existingReservationId: number): void {
- const index = this.reservations.findIndex((res) => res.reservationId === existingReservationId);
- this.reservations.splice(index, 1);
+ public async removeReservation(
+ reservation: Reservation,
+ reason?: ReservationTerminationReason
+ ): Promise<void> {
+ const connector = this.getConnectorStatus(reservation.connectorId);
+ switch (reason) {
+ case ReservationTerminationReason.TRANSACTION_STARTED: {
+ delete connector.reservation;
+ if (reservation.connectorId === 0) {
+ connector.status = ConnectorStatusEnum.Available;
+ }
+ break;
+ }
+ case ReservationTerminationReason.CONNECTOR_STATE_CHANGED: {
+ delete connector.reservation;
+ break;
+ }
+ default: {
+ // ReservationTerminationReason.EXPIRED, ReservationTerminationReason.CANCELED
+ connector.status = ConnectorStatusEnum.Available;
+ delete connector.reservation;
+ await this.ocppRequestService.requestHandler<
+ StatusNotificationRequest,
+ StatusNotificationResponse
+ >(
+ this,
+ RequestCommand.STATUS_NOTIFICATION,
+ OCPPServiceUtils.buildStatusNotificationRequest(
+ this,
+ reservation.connectorId,
+ ConnectorStatusEnum.Available
+ )
+ );
+ break;
+ }
+ }