'Regenerate Booking Invoice', 'message' => 'You have successfully regenerate booking invoice' ]; } /** @var CanFetchBooking */ private $canFetchBooking; /** @var FetchesBooking */ private $fetchesBooking; /** @var RegenerateInvoiceBookingProcessor */ private $regenerateInvoiceBookingProcessor; /** * RegenerateInvoiceBookingLogic constructor. * @param CanFetchBooking $canFetchBooking * @param FetchesBooking $fetchesBooking * @param RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor */ public function __construct( CanFetchBooking $canFetchBooking, FetchesBooking $fetchesBooking, RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor ) { $this->canFetchBooking = $canFetchBooking; $this->fetchesBooking = $fetchesBooking; $this->regenerateInvoiceBookingProcessor = $regenerateInvoiceBookingProcessor; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request): JsonResponse { $this->canFetchBooking->passes(); $booking = $this->fetchesBooking->execute( [ 'id' => $request->route('id'), 'status' => ApprovalStatus::COMPLETED, 'with_transactions' => true ] ); $normalInvoice = $request->input('normal_invoice', false); $this->regenerateInvoiceBookingProcessor->execute($booking, $normalInvoice); return $this->resourceResponse(new BookingResource($booking)); } }