diff --git a/app/Classes/Modules/Bookings/ControllersLogic/FetchBookingLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/FetchBookingLogic.php index d9857548..3700c46b 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/FetchBookingLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/FetchBookingLogic.php @@ -19,7 +19,7 @@ class FetchBookingLogic extends AbstractControllerLogic protected function notification():array { return [ 'title' => 'Retrieved Address', - 'message' => 'You have successfully retrieved a Address' + 'message' => 'You have successfully retrieved a Booking' ]; } diff --git a/app/Classes/Modules/Bookings/ControllersLogic/RegenerateDocumentLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/RegenerateDocumentLogic.php new file mode 100644 index 00000000..4dfc028a --- /dev/null +++ b/app/Classes/Modules/Bookings/ControllersLogic/RegenerateDocumentLogic.php @@ -0,0 +1,44 @@ + 'Regenerate Document', + 'message' => 'You have successfully regenerated the document' + ]; + } + + /** @var RegenerateDocumentProcessor */ + private $regenerateDocumentProcessor; + + /** + * @param Request $request + * @return JsonResponse + * @param RegenerateDocumentProcessor $regenerateDocumentProcessor + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function __construct(RegenerateDocumentProcessor $regenerateDocumentProcessor){ + $this->regenerateDocumentProcessor = $regenerateDocumentProcessor; + } + + public function logic(Request $request) : JsonResponse + { + $this->regenerateDocumentProcessor->execute($request->route('id'), $request->route('document_type')); + + return $this->response([]); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Bookings/Processors/RegenerateDocumentProcessor.php b/app/Classes/Modules/Bookings/Processors/RegenerateDocumentProcessor.php new file mode 100644 index 00000000..60d1335a --- /dev/null +++ b/app/Classes/Modules/Bookings/Processors/RegenerateDocumentProcessor.php @@ -0,0 +1,63 @@ +fetchesBooking = $fetchesBooking; + } + + /** + * @return void + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute(int $id, string $document_type) + { + $booking = $this->fetchesBooking->execute(['id' => $id]); + + $document = $booking->documents()->where('document_type', $document_type)->delete(); + + if ($document_type == 'SUPPLIER_DELIVER_ORDER') { + $po = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first(); + $supplier_deliver_order_transaction = $booking->transactions()->where('type', TransactionType::SUPPLIER_DELIVER)->first(); + $supplier = Company::find($booking->transactions()->where('type', TransactionType::PAYMENT)->where('status', 3)->first()->transactions()->first()); + $supplier_order_pdf = LaravelMpdf::loadView('pages.pdfs.supplier_deliver_order', ['supplier_deliver_order_transaction' => $supplier_deliver_order_transaction, 'po_order_transaction' => $po, 'supplier' => $supplier]); + + $document_object = new DocumentObject( + DocumentType::SUPPLIER_DELIVER_ORDER, + [chunk_split('data:application/pdf;base64,'.base64_encode($supplier_order_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + 'supplier_delivery_orders' + ); + + $document = (App()->make(CreatesDocument::class))->execute($booking, $document_object); + (App()->make(CreatesFiles::class))->execute($document, $document_object); + + } + } +} diff --git a/app/Http/Controllers/Bookings/RegenerateDocumentController.php b/app/Http/Controllers/Bookings/RegenerateDocumentController.php new file mode 100644 index 00000000..0bce66c1 --- /dev/null +++ b/app/Http/Controllers/Bookings/RegenerateDocumentController.php @@ -0,0 +1,21 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/resources/assets/vue/components/bookings/forms/RegenerateBookingDocumentComponent.vue b/resources/assets/vue/components/bookings/forms/RegenerateBookingDocumentComponent.vue new file mode 100644 index 00000000..892d6e93 --- /dev/null +++ b/resources/assets/vue/components/bookings/forms/RegenerateBookingDocumentComponent.vue @@ -0,0 +1,33 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue index dfce31bf..d764c29d 100644 --- a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue @@ -90,6 +90,14 @@ +
+
+
Regenerate Document
+
+ + + +
diff --git a/routes/booking.php b/routes/booking.php index d83bb4af..0eca1ba1 100644 --- a/routes/booking.php +++ b/routes/booking.php @@ -11,6 +11,7 @@ Route::group(['prefix' => 'booking', 'as' => 'booking.', 'namespace' => 'Booking Route::put('/restore/{id}', 'RestoreBookingController@restore')->name('restore'); Route::delete('/delete/{id}', 'DeleteBookingController@delete')->name('delete'); Route::post('/regenerate/invoice/{id}', 'RegenerateInvoiceBookingController@regenerate')->name('regenerate.invoice'); + Route::post('/regenerate/document/{id}/{document_type}', 'RegenerateDocumentController@regenerate')->name('regenerate.document'); Route::group(['prefix' => '{id}/payment', 'as' => 'payment.'], function () { Route::post('quotation', 'FetchBookingPaymentQuotationController@fetch')->name('quotation');