'Purchase Order Approval', 'message' => 'You have successfully updated the Purchase order status' ]; } /** @var FetchesBooking */ private $fetchesBooking; /** @var UpdatesTransactionStatus */ private $updatesTransactionStatus; /** @var CreateInvoiceTransactionV2Processor */ private $createInvoiceTransactionProcessor; /** * ApprovePurchaseOrderLogic constructor. * @param FetchesBooking $fetchesBooking * @param UpdatesTransactionStatus $updatesTransactionStatus * @param CreateInvoiceTransactionV2Processor $createInvoiceTransactionProcessor */ public function __construct(FetchesBooking $fetchesBooking, UpdatesTransactionStatus $updatesTransactionStatus, CreateInvoiceTransactionV2Processor $createInvoiceTransactionProcessor) { $this->fetchesBooking = $fetchesBooking; $this->updatesTransactionStatus = $updatesTransactionStatus; $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\MalformedRequestException */ public function logic(Request $request) : JsonResponse { $booking = $this->fetchesBooking->execute(['id' => $request->route('id')]); $purchaseOrder = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first(); $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->where('id', '!=', $purchaseOrder->id)->delete(); $this->updatesTransactionStatus->execute($purchaseOrder, ApprovalStatus::APPROVED); $bookingOriginalStatus = $booking->status; $this->createInvoiceTransactionProcessor->execute($booking, "", null, [ 'generateEInvoice' => false, 'generateEInvoiceWithNormalInvoiceTemplate' => false, 'generateEInvoiceRefund' => false, 'bookingOriginalStatus' => $bookingOriginalStatus ] ); return $this->response([]); } }