From 1d2f10079e1422ea3c45f041059c932d4db22c4b Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sun, 4 Apr 2021 15:37:49 +0800 Subject: [PATCH] Booking Detail Invoice Download (Frontend & Backend) --- .../Services/UpdatesBookingStatus.php | 22 ++++++ .../CreateInvoiceTransactionProcessor.php | 58 +++++++++++--- .../ValueObjects/Constants/DocumentType.php | 2 +- app/Http/Resources/BookingResource.php | 5 ++ app/Models/Booking.php | 12 ++- .../BookingDetailsSectionComponent.vue | 79 +++++++++++++++++++ resources/views/layouts/base_pdf.blade.php | 20 ++--- .../views/pages/pdfs/deliver_order.blade.php | 57 +++++++++++++ .../views/pages/pdfs/payment_order.blade.php | 57 +++++++++++++ .../views/pages/pdfs/purchase_order.blade.php | 1 + .../views/pages/pdfs/supplier_order.blade.php | 32 ++++++-- 11 files changed, 316 insertions(+), 29 deletions(-) create mode 100644 app/Classes/Modules/Bookings/Services/UpdatesBookingStatus.php create mode 100644 resources/views/pages/pdfs/deliver_order.blade.php create mode 100644 resources/views/pages/pdfs/payment_order.blade.php diff --git a/app/Classes/Modules/Bookings/Services/UpdatesBookingStatus.php b/app/Classes/Modules/Bookings/Services/UpdatesBookingStatus.php new file mode 100644 index 00000000..3264f7a7 --- /dev/null +++ b/app/Classes/Modules/Bookings/Services/UpdatesBookingStatus.php @@ -0,0 +1,22 @@ +status = $status; + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php index b36e16ab..22a3d9fa 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateInvoiceTransactionProcessor.php @@ -52,7 +52,16 @@ class CreateInvoiceTransactionProcessor private $updatesBookingStatus; /** @var PDF */ - private $pdf; + private $purchase_pdf; + + /** @var PDF */ + private $deliver_pdf; + + /** @var PDF */ + private $payment_pdf; + + /** @var PDF */ + private $supplier_pdf; /** * CreateInvoiceTransactionLogic constructor. @@ -61,7 +70,7 @@ class CreateInvoiceTransactionProcessor * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber * @param CalculatesBookingPaidAmount $calculatesBookingPaidAmount */ - public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesBookingStatus $updatesBookingStatus, PDF $pdf) + public function __construct(ListsTransactions $listsTransactions, CreatesTransaction $createsTransaction, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CalculatesBookingPaidAmount $calculatesBookingPaidAmount, CalculatesBookingCurrencyAverageRate $calculatesBookingCurrencyAverageRate, FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesBookingStatus $updatesBookingStatus, PDF $purchase_pdf, PDF $deliver_pdf, PDF $payment_pdf, PDF $supplier_pdf) { $this->listsTransactions = $listsTransactions; $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; @@ -72,7 +81,10 @@ class CreateInvoiceTransactionProcessor $this->createsDocument = $createsDocument; $this->createsFile = $createsFile; $this->updatesBookingStatus = $updatesBookingStatus; - $this->pdf = $pdf; + $this->purchase_pdf = $purchase_pdf; + $this->deliver_pdf = $deliver_pdf; + $this->payment_pdf = $payment_pdf; + $this->supplier_pdf = $supplier_pdf; } /** @@ -122,26 +134,52 @@ class CreateInvoiceTransactionProcessor $supplier = $this->fetchesCompany->execute(['id' => $transaction->receiver]); - $pdf = $this->pdf->loadView('pages.pdfs.purchase_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]); - + $purchase_order_pdf = $this->purchase_pdf->loadView('pages.pdfs.purchase_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]); $document_object = new DocumentObject( DocumentType::PURCHASE_ORDER, - [chunk_split('data:application/pdf;base64,'.base64_encode($pdf->output()))], + [chunk_split('data:application/pdf;base64,'.base64_encode($purchase_order_pdf->output()))], '', ApprovalStatus::COMPLETED, - 'purchase_order' + 'purchase_orders' ); $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); $this->createsFile->execute($document, $document_object); + $deliver_order_pdf = $this->deliver_pdf->loadView('pages.pdfs.deliver_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]); + $document_object = new DocumentObject( + DocumentType::DELIVER_ORDER, + [chunk_split('data:application/pdf;base64,'.base64_encode($deliver_order_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + 'deliver_orders' + ); + $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); + $this->createsFile->execute($document, $document_object); + $payment_order_pdf = $this->payment_pdf->loadView('pages.pdfs.payment_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]); + $document_object = new DocumentObject( + DocumentType::PAYMENT_ORDER, + [chunk_split('data:application/pdf;base64,'.base64_encode($payment_order_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + 'payment_orders' + ); + $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); + $this->createsFile->execute($document, $document_object); - + $supplier_order_pdf = $this->supplier_pdf->loadView('pages.pdfs.supplier_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]); + $document_object = new DocumentObject( + DocumentType::SUPPLIER_ORDER, + [chunk_split('data:application/pdf;base64,'.base64_encode($supplier_order_pdf->output()))], + '', + ApprovalStatus::COMPLETED, + 'supplier_orders' + ); + $document = $this->createsDocument->execute($po_order_transaction->booking, $document_object); + $this->createsFile->execute($document, $document_object); $transaction = $this->createsTransaction->execute($po_order_transaction->booking, $transaction_object); $this->updatesBookingStatus->execute($booking, ApprovalStatus::COMPLETED); - // dd('yess'); - } } } diff --git a/app/Classes/ValueObjects/Constants/DocumentType.php b/app/Classes/ValueObjects/Constants/DocumentType.php index 76443a50..299e599e 100644 --- a/app/Classes/ValueObjects/Constants/DocumentType.php +++ b/app/Classes/ValueObjects/Constants/DocumentType.php @@ -19,6 +19,6 @@ final class DocumentType { public const PURCHASE_ORDER = 'PURCHASE_ORDER'; public const DELIVER_ORDER = 'DELIVER_ORDER'; - public const SUPPLIER_ORDER = 'SUPPLIER_ORDER'; public const PAYMENT_ORDER = 'PAYMENT_ORDER'; + public const SUPPLIER_ORDER = 'SUPPLIER_ORDER'; } diff --git a/app/Http/Resources/BookingResource.php b/app/Http/Resources/BookingResource.php index 57d93e57..ec3c4d9e 100644 --- a/app/Http/Resources/BookingResource.php +++ b/app/Http/Resources/BookingResource.php @@ -7,6 +7,7 @@ use App\Classes\Modules\Bookings\Services\CalculatesBookingOutstanding; use App\Classes\Modules\Bookings\Services\CalculatesBookingPaidAmount; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\TransactionType; +use App\Classes\ValueObjects\Constants\DocumentType; use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; @@ -35,6 +36,10 @@ class BookingResource extends JsonResource 'fixed_currency' => new CurrencyResource($this->fixedCurrency), 'convertible_currency' => new CurrencyResource($this->convertibleCurrency), 'conversion_currency' => new CurrencyResource($this->conversionCurrency), + 'purchase_order_document' => new DocumentResource($this->documents()->where('document_type', DocumentType::PURCHASE_ORDER)->first()), + 'deliver_order_document' => new DocumentResource($this->documents()->where('document_type', DocumentType::DELIVER_ORDER)->first()), + 'payment_order_document' => new DocumentResource($this->documents()->where('document_type', DocumentType::PAYMENT_ORDER)->first()), + 'supplier_order_document' => new DocumentResource($this->documents()->where('document_type', DocumentType::SUPPLIER_ORDER)->first()), 'status' => $this->status, 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y'), $this->mergeWhen($this->relationLoaded('transactions'), [ diff --git a/app/Models/Booking.php b/app/Models/Booking.php index e719abc5..3beacb25 100644 --- a/app/Models/Booking.php +++ b/app/Models/Booking.php @@ -2,11 +2,13 @@ namespace App\Models; +use App\Classes\General\Interfaces\Documentable; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Scopes\CustomerBookingsScope; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\SoftDeletes; @@ -22,7 +24,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property \App\Models\Currency convertible_currency_id * @property \App\Models\Currency conversion_currency_id */ -class Booking extends AbstractModel +class Booking extends AbstractModel implements Documentable { use SoftDeletes; @@ -78,6 +80,14 @@ class Booking extends AbstractModel return $this->BelongsTo(Currency::class, 'conversion_currency_id'); } + /** + * @return MorphMany + */ + public function documents(): MorphMany + { + return $this->MorphMany(Document::class, 'owner'); + } + /** * @return HasMany */ diff --git a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue index d6b19cde..cc4d85cd 100644 --- a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue @@ -222,6 +222,85 @@ +
+
+
+
+
Invoice
+
+
+
+
+
+
+
+
Purchase Order:
+
+
+
+ + + +
+
+
+
+
+
Purchase Order:
+
+
+
+ + + +
+
+
+
+
+
Purchase Order:
+
+
+
+ + + +
+
+
+
+
+
Purchase Order:
+
+
+
+ + + +
+
+
+
+
+
+
+
diff --git a/resources/views/layouts/base_pdf.blade.php b/resources/views/layouts/base_pdf.blade.php index dbc034fd..78206201 100644 --- a/resources/views/layouts/base_pdf.blade.php +++ b/resources/views/layouts/base_pdf.blade.php @@ -2,16 +2,16 @@ - - + + diff --git a/resources/views/pages/pdfs/deliver_order.blade.php b/resources/views/pages/pdfs/deliver_order.blade.php new file mode 100644 index 00000000..80c779d6 --- /dev/null +++ b/resources/views/pages/pdfs/deliver_order.blade.php @@ -0,0 +1,57 @@ +@extends('layouts.base_pdf') +@section('inner_content') + +

Deliver Order

+ + + + + + + +
{{$supplier->name}}{{\Carbon\Carbon::now('Asia/Singapore')->format('d-m-Y h:s')}}
+ + + + + + + + + + + + + +
ReferenceAmountBank in Details
{{$transaction->booking->marking}}MYR {{ $transaction->convert_original_amount() }}Account Holder Name: {{$transaction->booking->bank->holder_name}}
{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}} +
Branch: 首都
Bank in Amount: {{$transaction->original_amount}}
+
+ + + + + + + + + + @foreach($transaction->transactionDetails as $transaction_detail) + + + + + + + + @endforeach + +
Product CodeProduct NameQuantityPriceAmount
{{ $transaction_detail->product_code }}{{ $transaction_detail->product_name }}{{ $transaction_detail->quantity }}MYR {{ $transaction_detail->convert_original_price() }}MYR {{ $transaction_detail->convert_original_amount() }}
+@endsection \ No newline at end of file diff --git a/resources/views/pages/pdfs/payment_order.blade.php b/resources/views/pages/pdfs/payment_order.blade.php new file mode 100644 index 00000000..dedc787b --- /dev/null +++ b/resources/views/pages/pdfs/payment_order.blade.php @@ -0,0 +1,57 @@ +@extends('layouts.base_pdf') +@section('inner_content') + +

Payment Order

+ + + + + + + +
{{$supplier->name}}{{\Carbon\Carbon::now('Asia/Singapore')->format('d-m-Y h:s')}}
+ + + + + + + + + + + + + +
ReferenceAmountBank in Details
{{$transaction->booking->marking}}MYR {{ $transaction->convert_original_amount() }}Account Holder Name: {{$transaction->booking->bank->holder_name}}
{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}} +
Branch: 首都
Bank in Amount: {{$transaction->original_amount}}
+
+ + + + + + + + + + @foreach($transaction->transactionDetails as $transaction_detail) + + + + + + + + @endforeach + +
Product CodeProduct NameQuantityPriceAmount
{{ $transaction_detail->product_code }}{{ $transaction_detail->product_name }}{{ $transaction_detail->quantity }}MYR {{ $transaction_detail->convert_original_price() }}MYR {{ $transaction_detail->convert_original_amount() }}
+@endsection \ No newline at end of file diff --git a/resources/views/pages/pdfs/purchase_order.blade.php b/resources/views/pages/pdfs/purchase_order.blade.php index ad8d8e63..81739ce5 100644 --- a/resources/views/pages/pdfs/purchase_order.blade.php +++ b/resources/views/pages/pdfs/purchase_order.blade.php @@ -9,6 +9,7 @@ padding: 15px; } +

Purchase Order

diff --git a/resources/views/pages/pdfs/supplier_order.blade.php b/resources/views/pages/pdfs/supplier_order.blade.php index 1d1029b2..215b96c8 100644 --- a/resources/views/pages/pdfs/supplier_order.blade.php +++ b/resources/views/pages/pdfs/supplier_order.blade.php @@ -9,6 +9,7 @@ padding: 15px; } +

Purchase Order

@@ -21,17 +22,34 @@ - - @foreach($transactions as $transaction) + + + + + + +
ReferenceRate Amount Bank in Details
{{$transaction->booking->marking}}{{$transaction->original_currency->short_code}} {{$transaction->original_amount}}Account Holder Name: {{$transaction->booking->bank->holder_name}}
{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}} +
Branch: 首都
Bank in Amount: {{$transaction->original_amount}}
+
+ + + + + + + + + + @foreach($transaction->transactionDetails as $transaction_detail) - - - - + + + + + @endforeach
Product CodeProduct NameQuantityPriceAmount
{{$transaction->booking->marking}}{{$transaction->currency_rate}}{{$transaction->original_currency->short_code}} {{$transaction->original_amount}}Account Holder Name: {{$transaction->booking->bank->holder_name}}
{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}} -
Branch: 首都
Bank in Amount: {{$transaction->original_amount}}
{{ $transaction_detail->product_code }}{{ $transaction_detail->product_name }}{{ $transaction_detail->quantity }}{{$transaction->original_currency->short_code}} {{ $transaction_detail->price }}{{$transaction->original_currency->short_code}} {{ $transaction_detail->amount }}