def accept(self, reason=None, force=False): if not force: collisions = get_prebooking_collisions(self.booking) if collisions: collision_data = reservation_occurrences_schema.dump(collisions) raise ExpectedError('prebooking_collision', data=collision_data) self.booking.accept(session.user, reason)
def test_get_prebooking_collisions(create_reservation, dummy_user, freeze_time): freeze_time(datetime(2020, 3, 20, 12, 0, 0)) start_dt = datetime(2020, 4, 1, 9, 0) end_dt = datetime(2020, 4, 1, 12, 0) res1 = create_reservation(start_dt=start_dt, end_dt=end_dt, state=ReservationState.pending) res2 = create_reservation(start_dt=start_dt, end_dt=end_dt, state=ReservationState.pending) create_reservation(start_dt=end_dt, end_dt=datetime(2020, 4, 1, 15, 0), state=ReservationState.pending) res_cancelled = create_reservation(start_dt=start_dt, end_dt=end_dt, state=ReservationState.pending) res_cancelled.cancel(dummy_user, silent=True) res_rejected = create_reservation(start_dt=start_dt, end_dt=end_dt, state=ReservationState.pending) res_rejected.reject(dummy_user, 'Testing', silent=True) collisions = get_prebooking_collisions(res1) assert collisions == [res2.occurrences.one()]
def accept(self, user, reason=None): self.state = ReservationState.accepted if reason: log_msg = f'Reservation accepted: {reason}' else: log_msg = 'Reservation accepted' self.add_edit_log(ReservationEditLog(user_name=user.full_name, info=[log_msg])) notify_confirmation(self, reason) signals.rb.booking_state_changed.send(self) pre_occurrences = get_prebooking_collisions(self) for occurrence in pre_occurrences: occurrence.reject(user, 'Rejected due to collision with a confirmed reservation')