@@ -1235,26 +1235,40 @@ def reject_reservation(
12351235 view_ticket : ReservationTicket | None = None
12361236) -> Response | None :
12371237
1238+ def respond () -> Response | None :
1239+ # return none on intercooler js requests
1240+ if not request .headers .get ('X-IC-Request' ):
1241+ if view_ticket is not None :
1242+ return request .redirect (request .link (view_ticket ))
1243+ return request .redirect (request .link (self ))
1244+ return None
1245+
12381246 token = self .token
12391247 resource = request .app .libres_resources .by_reservation (self )
12401248 assert resource is not None
12411249 reservation_id_str = request .params .get ('reservation-id' )
1242- if isinstance (reservation_id_str , str ) and reservation_id_str .isdigit ():
1243- reservation_id = int (reservation_id_str )
1244- else :
1245- reservation_id = 0
1246-
12471250 all_reservations : list [Reservation ] = (
12481251 resource .scheduler .reservations_by_token (token ) # type:ignore
12491252 .order_by (Reservation .start ).all ()
12501253 )
1251-
12521254 targeted : Sequence [Reservation ]
1253- targeted = tuple (r for r in all_reservations if r .id == reservation_id )
1254- targeted = targeted or all_reservations
1255- excluded = tuple (r for r in all_reservations if r .id not in {
1256- r .id for r in targeted
1257- })
1255+ if reservation_id_str is not None :
1256+ if not (
1257+ isinstance (reservation_id_str , str )
1258+ and reservation_id_str .isdigit ()
1259+ ):
1260+ raise exc .HTTPBadRequest ()
1261+
1262+ reservation_id = int (reservation_id_str )
1263+ targeted = tuple (r for r in all_reservations if r .id == reservation_id )
1264+ if not targeted :
1265+ request .warning (_ ('The targeted reservation no longer exists' ))
1266+ return respond ()
1267+ else :
1268+ targeted = all_reservations
1269+
1270+ targeted_ids = {r .id for r in targeted }
1271+ excluded = tuple (r for r in all_reservations if r .id not in targeted_ids )
12581272
12591273 forms = FormCollection (request .session )
12601274 submission = forms .submissions .by_id (token )
@@ -1277,12 +1291,7 @@ def reject_reservation(
12771291 'to be refunded before the reservation can be rejected'
12781292 ))
12791293
1280- if not request .headers .get ('X-IC-Request' ):
1281- if view_ticket is not None :
1282- return request .redirect (request .link (view_ticket ))
1283- return request .redirect (request .link (self ))
1284-
1285- return None
1294+ return respond ()
12861295
12871296 savepoint = transaction .savepoint ()
12881297 ReservationMessage .create (targeted , ticket , request , 'rejected' )
@@ -1441,12 +1450,7 @@ def email_iter() -> Iterator[EmailJsonDict]:
14411450 'but the payment is no longer open.'
14421451 ))
14431452
1444- # return none on intercooler js requests
1445- if not request .headers .get ('X-IC-Request' ):
1446- if view_ticket is not None :
1447- return request .redirect (request .link (view_ticket ))
1448- return request .redirect (request .link (self ))
1449- return None
1453+ return respond ()
14501454
14511455
14521456@OrgApp .view (
0 commit comments