'Regenerate Booking Invoice', 'message' => 'You have successfully regenerate booking invoice' ]; } /** @var CanFetchBooking */ private $canFetchBooking; /** @var FetchesBooking */ private $fetchesBooking; /** @var RegenerateInvoiceBookingProcessor */ private $regenerateInvoiceBookingProcessor; /** @var RegenerateInvoiceBookingV2Processor */ private $regenerateInvoiceBookingV2Processor; /** * RegenerateInvoiceBookingLogic constructor. * @param CanFetchBooking $canFetchBooking * @param FetchesBooking $fetchesBooking * @param RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor * @param RegenerateInvoiceBookingV2Processor $regenerateInvoiceBookingV2Processor */ public function __construct( CanFetchBooking $canFetchBooking, FetchesBooking $fetchesBooking, RegenerateInvoiceBookingProcessor $regenerateInvoiceBookingProcessor, RegenerateInvoiceBookingV2Processor $regenerateInvoiceBookingV2Processor ) { $this->canFetchBooking = $canFetchBooking; $this->fetchesBooking = $fetchesBooking; $this->regenerateInvoiceBookingProcessor = $regenerateInvoiceBookingProcessor; $this->regenerateInvoiceBookingV2Processor = $regenerateInvoiceBookingV2Processor; } /** * @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 ] ); $eInvoiceWithNormalInvoiceTemplate = $request->input('normal_invoice', false); $eInvoiceRefund = $request->input('e_invoice_refund', false); if(!$eInvoiceRefund){ if($booking->status !== ApprovalStatus::COMPLETED){ throw new MalformedRequestException('Booking incomplete.'); } } // if($eInvoiceRefund){ $this->regenerateInvoiceBookingV2Processor->execute($booking, $eInvoiceWithNormalInvoiceTemplate, $eInvoiceRefund); // } // else{ // $this->regenerateInvoiceBookingProcessor->execute($booking, $eInvoiceWithNormalInvoiceTemplate); // } return $this->resourceResponse(new BookingResource($booking)); } }