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 @@ +
| {{$supplier->name}} | +{{\Carbon\Carbon::now('Asia/Singapore')->format('d-m-Y h:s')}} | +
| Reference | +Amount | +Bank 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}} |
+
| Product Code | +Product Name | +Quantity | +Price | +Amount | +
| {{ $transaction_detail->product_code }} | +{{ $transaction_detail->product_name }} | +{{ $transaction_detail->quantity }} | +MYR {{ $transaction_detail->convert_original_price() }} | +MYR {{ $transaction_detail->convert_original_amount() }} | +
| {{$supplier->name}} | +{{\Carbon\Carbon::now('Asia/Singapore')->format('d-m-Y h:s')}} | +
| Reference | +Amount | +Bank 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}} |
+
| Product Code | +Product Name | +Quantity | +Price | +Amount | +
| {{ $transaction_detail->product_code }} | +{{ $transaction_detail->product_name }} | +{{ $transaction_detail->quantity }} | +MYR {{ $transaction_detail->convert_original_price() }} | +MYR {{ $transaction_detail->convert_original_amount() }} | +
| Reference | -Rate | 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}} |
+
| Product Code | +Product Name | +Quantity | +Price | +Amount | +||||
| {{$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 }} |