getContainer()->getPermissionsService()->currentUserCanWriteStatus(Entities::APPOINTMENTS)) { throw new AccessDeniedException('You are not allowed to update appointment status'); } $result = new CommandResult(); $this->checkMandatoryFields($command); /** @var CustomerBookingRepository $bookingRepository */ $bookingRepository = $this->container->get('domain.booking.customerBooking.repository'); /** @var AppointmentRepository $appointmentRepo */ $appointmentRepo = $this->container->get('domain.booking.appointment.repository'); $appointmentId = (int)$command->getArg('id'); $requestedStatus = $command->getField('status'); /** @var Appointment $appointment */ $appointment = $appointmentRepo->getById($appointmentId); $bookings = $appointment->getBookings(); foreach ($bookings->toArray() as $booking) { $booking = $bookings->getItem($booking['id']); $booking->setStatus(new BookingStatus($requestedStatus)); } $appointment->setStatus(new BookingStatus($requestedStatus)); $appointmentRepo->beginTransaction(); try { $bookingRepository->updateStatusByAppointmentId($appointmentId, $requestedStatus); $appointmentRepo->updateStatusById($appointmentId, $requestedStatus); $appointmentRepo->commit(); } catch (QueryExecutionException $e) { $appointmentRepo->rollback(); throw $e; } $result->setResult(CommandResult::RESULT_SUCCESS); $result->setMessage('Successfully updated appointment status'); $result->setData([ Entities::APPOINTMENT => $appointment->toArray(), 'status' => $requestedStatus, 'message' => BackendStrings::getAppointmentStrings()['appointment_status_changed'] . $requestedStatus ]); return $result; } }