mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-19 04:23:55 +00:00
Booking Detail Invoice Download (Frontend & Backend)
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Bookings\Services;
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\Booking;
|
||||
|
||||
class UpdatesBookingStatus extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Booking $model
|
||||
* @param int $status
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
*/
|
||||
public function execute(Booking $model, int $status)
|
||||
{
|
||||
$model->status = $status;
|
||||
return $this->handler($model);
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
|
||||
@@ -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'), [
|
||||
|
||||
+11
-1
@@ -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
|
||||
*/
|
||||
|
||||
@@ -222,6 +222,85 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-20" v-if="booking.status == 3">
|
||||
<div class="col">
|
||||
<div class="row m-b-10">
|
||||
<div class="col">
|
||||
<div class="font-head fs-10 all-caps">Invoice</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="col p-t-10 p-b-10 p-r-0 bg-white">
|
||||
<div v-if="booking.purchase_order_document" class="row align-items-end m-b-10 ">
|
||||
<div class="col">
|
||||
<div class="font-heading all-caps fs-10">Purchase Order:</div>
|
||||
</div>
|
||||
<div class="col-auto text-right">
|
||||
<div class="col-auto no-padding m-r-5">
|
||||
<document-file-viewr-component :file="booking.purchase_order_document.files[0]">
|
||||
<template slot="button">
|
||||
<div class="icon-thumbnail fs-11 text-white icon-25 bg-primary btn-rounded float-left m-r-5">
|
||||
<i class="fa fa-file-image-o fs-10"></i>
|
||||
</div>
|
||||
</template>
|
||||
</document-file-viewr-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="booking.deliver_order_document" class="row align-items-end m-b-10 ">
|
||||
<div class="col">
|
||||
<div class="font-heading all-caps fs-10">Purchase Order:</div>
|
||||
</div>
|
||||
<div class="col-auto text-right">
|
||||
<div class="col-auto no-padding m-r-5">
|
||||
<document-file-viewr-component :file="booking.deliver_order_document.files[0]">
|
||||
<template slot="button">
|
||||
<div class="icon-thumbnail fs-11 text-white icon-25 bg-primary btn-rounded float-left m-r-5">
|
||||
<i class="fa fa-file-image-o fs-10"></i>
|
||||
</div>
|
||||
</template>
|
||||
</document-file-viewr-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="booking.payment_order_document" class="row align-items-end m-b-10 ">
|
||||
<div class="col">
|
||||
<div class="font-heading all-caps fs-10">Purchase Order:</div>
|
||||
</div>
|
||||
<div class="col-auto text-right">
|
||||
<div class="col-auto no-padding m-r-5">
|
||||
<document-file-viewr-component :file="booking.payment_order_document.files[0]">
|
||||
<template slot="button">
|
||||
<div class="icon-thumbnail fs-11 text-white icon-25 bg-primary btn-rounded float-left m-r-5">
|
||||
<i class="fa fa-file-image-o fs-10"></i>
|
||||
</div>
|
||||
</template>
|
||||
</document-file-viewr-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="booking.supplier_order_document" class="row align-items-end m-b-10 ">
|
||||
<div class="col">
|
||||
<div class="font-heading all-caps fs-10">Purchase Order:</div>
|
||||
</div>
|
||||
<div class="col-auto text-right">
|
||||
<div class="col-auto no-padding m-r-5">
|
||||
<document-file-viewr-component :file="booking.supplier_order_document.files[0]">
|
||||
<template slot="button">
|
||||
<div class="icon-thumbnail fs-11 text-white icon-25 bg-primary btn-rounded float-left m-r-5">
|
||||
<i class="fa fa-file-image-o fs-10"></i>
|
||||
</div>
|
||||
</template>
|
||||
</document-file-viewr-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-20" v-if="booking.payment_history.length">
|
||||
<div class="col">
|
||||
<div class="row m-b-10">
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: SimHei;
|
||||
src: url('{{base_path().'/public/'}}simhei.ttf') format('truetype');
|
||||
}
|
||||
* {
|
||||
font-family: SimHei, serif ;
|
||||
}
|
||||
</style>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: SimHei;
|
||||
src: url('{{base_path().'/public/'}}simhei.ttf') format('truetype');
|
||||
}
|
||||
* {
|
||||
font-family: SimHei, serif ;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
@extends('layouts.base_pdf')
|
||||
@section('inner_content')
|
||||
<style>
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
th, td {
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
<h1>Deliver Order</h1>
|
||||
<table style="margin-bottom: 25px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{$supplier->name}}</td>
|
||||
<td>{{\Carbon\Carbon::now('Asia/Singapore')->format('d-m-Y h:s')}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Reference</td>
|
||||
<td>Amount</td>
|
||||
<td>Bank in Details</td>
|
||||
</tr>
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{$transaction->booking->marking}}</td>
|
||||
<td>MYR {{ $transaction->convert_original_amount() }}</td>
|
||||
<td>Account Holder Name: {{$transaction->booking->bank->holder_name}}<br>{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}}
|
||||
<br>Branch: 首都<br>Bank in Amount: {{$transaction->original_amount}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
<table style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Product Code</td>
|
||||
<td>Product Name</td>
|
||||
<td>Quantity</td>
|
||||
<td>Price</td>
|
||||
<td>Amount</td>
|
||||
</tr>
|
||||
@foreach($transaction->transactionDetails as $transaction_detail)
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{ $transaction_detail->product_code }}</td>
|
||||
<td>{{ $transaction_detail->product_name }}</td>
|
||||
<td>{{ $transaction_detail->quantity }}</td>
|
||||
<td>MYR {{ $transaction_detail->convert_original_price() }}</td>
|
||||
<td>MYR {{ $transaction_detail->convert_original_amount() }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endsection
|
||||
@@ -0,0 +1,57 @@
|
||||
@extends('layouts.base_pdf')
|
||||
@section('inner_content')
|
||||
<style>
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
th, td {
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
<h1>Payment Order</h1>
|
||||
<table style="margin-bottom: 25px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{$supplier->name}}</td>
|
||||
<td>{{\Carbon\Carbon::now('Asia/Singapore')->format('d-m-Y h:s')}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Reference</td>
|
||||
<td>Amount</td>
|
||||
<td>Bank in Details</td>
|
||||
</tr>
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{$transaction->booking->marking}}</td>
|
||||
<td>MYR {{ $transaction->convert_original_amount() }}</td>
|
||||
<td>Account Holder Name: {{$transaction->booking->bank->holder_name}}<br>{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}}
|
||||
<br>Branch: 首都<br>Bank in Amount: {{$transaction->original_amount}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
<table style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Product Code</td>
|
||||
<td>Product Name</td>
|
||||
<td>Quantity</td>
|
||||
<td>Price</td>
|
||||
<td>Amount</td>
|
||||
</tr>
|
||||
@foreach($transaction->transactionDetails as $transaction_detail)
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{ $transaction_detail->product_code }}</td>
|
||||
<td>{{ $transaction_detail->product_name }}</td>
|
||||
<td>{{ $transaction_detail->quantity }}</td>
|
||||
<td>MYR {{ $transaction_detail->convert_original_price() }}</td>
|
||||
<td>MYR {{ $transaction_detail->convert_original_amount() }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endsection
|
||||
@@ -9,6 +9,7 @@
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
<h1>Purchase Order</h1>
|
||||
<table style="margin-bottom: 25px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
padding: 15px;
|
||||
}
|
||||
</style>
|
||||
<h1>Purchase Order</h1>
|
||||
<table style="margin-bottom: 25px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
@@ -21,17 +22,34 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Reference</td>
|
||||
<td>Rate</td>
|
||||
<td>Amount</td>
|
||||
<td>Bank in Details</td>
|
||||
</tr>
|
||||
@foreach($transactions as $transaction)
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{$transaction->booking->marking}}</td>
|
||||
<td>{{$transaction->original_currency->short_code}} {{$transaction->original_amount}}</td>
|
||||
<td>Account Holder Name: {{$transaction->booking->bank->holder_name}}<br>{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}}
|
||||
<br>Branch: 首都<br>Bank in Amount: {{$transaction->original_amount}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<br>
|
||||
<table style="width:100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Product Code</td>
|
||||
<td>Product Name</td>
|
||||
<td>Quantity</td>
|
||||
<td>Price</td>
|
||||
<td>Amount</td>
|
||||
</tr>
|
||||
@foreach($transaction->transactionDetails as $transaction_detail)
|
||||
<tr style="margin-bottom: 10px;">
|
||||
<td>{{$transaction->booking->marking}}</td>
|
||||
<td>{{$transaction->currency_rate}}</td>
|
||||
<td>{{$transaction->original_currency->short_code}} {{$transaction->original_amount}}</td>
|
||||
<td>Account Holder Name: {{$transaction->booking->bank->holder_name}}<br>{{$transaction->booking->bank->bank_name}}: {{$transaction->booking->bank->account_no}}
|
||||
<br>Branch: 首都<br>Bank in Amount: {{$transaction->original_amount}}</td>
|
||||
<td>{{ $transaction_detail->product_code }}</td>
|
||||
<td>{{ $transaction_detail->product_name }}</td>
|
||||
<td>{{ $transaction_detail->quantity }}</td>
|
||||
<td>{{$transaction->original_currency->short_code}} {{ $transaction_detail->price }}</td>
|
||||
<td>{{$transaction->original_currency->short_code}} {{ $transaction_detail->amount }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
|
||||
Reference in New Issue
Block a user