regenerate documents

This commit is contained in:
edmondlang
2022-04-09 21:52:27 +08:00
parent df6a96addd
commit db6a0c5100
7 changed files with 171 additions and 1 deletions
@@ -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'
];
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Bookings\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Bookings\Processors\RegenerateDocumentProcessor;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RegenerateDocumentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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([]);
}
}
@@ -0,0 +1,63 @@
<?php
namespace App\Classes\Modules\Bookings\Processors;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Models\Booking;
use \App\Models\Company;
class RegenerateDocumentProcessor
{
/** @var FetchesBooking */
private $fetchesBooking;
/**
* RegenerateDocumentProcessor constructor.
* @param FetchesBooking $fetchesBooking
*/
public function __construct(
FetchesBooking $fetchesBooking
)
{
$this->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);
}
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Controllers\Bookings;
use Illuminate\Http\Request;
use App\Classes\Modules\Bookings\Services\RegeneratesDocumentFormat;
use App\Classes\Modules\Bookings\ControllersLogic\RegenerateDocumentLogic;
use App\Classes\ValueObjects\Constants\DocumentType;
class RegenerateDocumentController
{
/**
* @param Request $request
* @param RegenerateDocumentLogic $logic
* @return JsonResponse
*/
public function regenerate(Request $request, RegenerateDocumentLogic $logic){
return $logic->execute($request);
}
}
@@ -0,0 +1,33 @@
<template>
<div class="row">
<div class="col">
<loading-component style="height: 300px; top: 0;" key="1" color="success" v-show="isLoading" ></loading-component>
<div class="row justify-content-center" v-show="!isLoading">
<div class="col">
<div class="row m-b-20">
<div class="col">
<h3 class="all-caps">Are you Sure?</h3>
<div class="fs-11">Are you sure you want to regenerate the document for this transfer?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-danger btn-block b-rad-none" @click="submit(route('api.booking.regenerate.document', data.id, 'SUPPLIER_DELIVER_ORDER'), 'post', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
mixins: [componentHandler, ModalFormHandler]
}
</script>
@@ -90,6 +90,14 @@
</div>
</template>
</document-file-viewer-component>
<div class="row m-t-15" v-if="booking.status === 3 && $store.getters.isSuperAdmin">
<div class="col-sm col-md-auto">
<div class="btn btn-sm btn block all-caps b-rad-none btn-danger pointer requestModal" data-type="regenerateDocument">Regenerate Document</div>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="regenerateDocument">
<regenerate-booking-document-component :data="booking" :section="section" class="text-center"></regenerate-booking-document-component>
</modal-component>
</div>
</div>
</div>
</div>
+1
View File
@@ -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');