@@ -102,7 +102,7 @@ ocpp::types::AuthorizationStatus ReservationManager::isTransactionAllowed(unsign
102102 if (connector)
103103 {
104104 // Check if connector is reserved
105- if (connector->status == ChargePointStatus::Reserved )
105+ if (connector->reservation_id_tag . length () > 0 )
106106 {
107107 // Check if id tag match
108108 if (id_tag == connector->reservation_id_tag )
@@ -130,7 +130,7 @@ ocpp::types::AuthorizationStatus ReservationManager::isTransactionAllowed(unsign
130130 {
131131 // Check if connector 0 is reserved
132132 Connector& charge_point = m_connectors.getChargePointConnector ();
133- if (charge_point.status == ChargePointStatus::Reserved )
133+ if (charge_point.reservation_id_tag . length () > 0 )
134134 {
135135 // Ensure that the module functions properly even when the gun is inserted first by the user.
136136 if (m_connectors.getConnector (connector_id)->status == ChargePointStatus::Preparing)
@@ -180,6 +180,7 @@ bool ReservationManager::handleMessage(const ocpp::messages::ReserveNowReq& requ
180180{
181181 bool ret = false ;
182182
183+ DateTime now = DateTime::now ();
183184 // Get requested connector
184185 Connector* connector = m_connectors.getConnector (request.connectorId );
185186 if (connector)
@@ -227,13 +228,20 @@ bool ReservationManager::handleMessage(const ocpp::messages::ReserveNowReq& requ
227228 connector->reservation_expiry_date = request.expiryDate ;
228229 response.status = ReservationStatus::Accepted;
229230
231+ if (connector->reservation_expiry_date > now)
232+ {
230233 // Update connector status and notify new status
231234 m_worker_pool.run <void >(
232235 [this , connector]
233236 {
234237 m_status_manager.updateConnectorStatus (connector->id , ChargePointStatus::Reserved);
235238 m_events_handler.reservationStarted (connector->id );
236239 });
240+ }
241+ else
242+ {
243+ response.status = ReservationStatus::Rejected;
244+ }
237245 break ;
238246 }
239247
@@ -293,7 +301,7 @@ bool ReservationManager::handleMessage(const ocpp::messages::CancelReservationRe
293301 response.status = CancelReservationStatus::Rejected;
294302 for (const Connector* connector : m_connectors.getConnectors ())
295303 {
296- if ((connector->status == ChargePointStatus::Reserved ) && (connector->reservation_id == request.reservationId ))
304+ if ((connector->reservation_id_tag . length () > 0 ) && (connector->reservation_id == request.reservationId ))
297305 {
298306 // Cancel reservation
299307 m_worker_pool.run <void >([this , connector_id = connector->id ] { endReservation (connector_id, true ); });
@@ -316,7 +324,7 @@ void ReservationManager::checkExpiries()
316324 // Check reservations
317325 for (const Connector* connector : m_connectors.getConnectors ())
318326 {
319- if ((connector->status == ChargePointStatus::Reserved ) && (connector->reservation_expiry_date <= now))
327+ if ((connector->reservation_id_tag . length () > 0 ) && (connector->reservation_expiry_date <= now))
320328 {
321329 // End reservation
322330 m_worker_pool.run <void >(std::bind (&ReservationManager::endReservation, this , connector->id , false ));
0 commit comments