mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
179 lines
5.7 KiB
PHP
179 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Transformers;
|
|
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
|
use App\Models\Transaction;
|
|
use Illuminate\Support\Carbon;
|
|
use League\Fractal\Resource\Collection;
|
|
use League\Fractal\Resource\Item;
|
|
use League\Fractal\TransformerAbstract;
|
|
|
|
class TransactionTransformer extends TransformerAbstract
|
|
{
|
|
/**
|
|
* List of resources to automatically include
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $defaultIncludes = [
|
|
'order',
|
|
'documents',
|
|
'currency',
|
|
'original_currency',
|
|
'details',
|
|
'transactions',
|
|
'payment_attempts',
|
|
'payment_history',
|
|
'remarks'
|
|
];
|
|
|
|
/**
|
|
* List of resources possible to include
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $availableIncludes = [
|
|
//
|
|
];
|
|
|
|
/**
|
|
* A Fractal transformer.
|
|
*
|
|
* @param Transaction $transaction
|
|
* @return array
|
|
*/
|
|
public function transform(Transaction $transaction): array
|
|
{
|
|
return [
|
|
'id' => $transaction->id,
|
|
'type' => (int)$transaction->type,
|
|
'bill_no' => $transaction->bill_no,
|
|
'amount' => (double)$transaction->amount,
|
|
'payment_method' => (int)$transaction->payment_method,
|
|
'payment_reference' => $transaction->payment_reference,
|
|
'outstanding' => $this->getOutstandingAmount($transaction),
|
|
'floating' => $this->getFloatingAmount($transaction),
|
|
'service_charge' => (double)$transaction->service_charge,
|
|
'tax' => (double)$transaction->tax,
|
|
'original_amount' => (double)$transaction->original_amount,
|
|
'currency_rate' => (double)$transaction->currency_rate,
|
|
'status' => $transaction->status,
|
|
'expires_on' => Carbon::parse($transaction->expires_on)->format('d-m-Y h:s:i'),
|
|
'updated_at' => Carbon::parse($transaction->updated_at)->format('d-m-Y'),
|
|
'created_at' => Carbon::parse($transaction->created_at)->format('d-m-Y')
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Include order
|
|
* @param Transaction $transaction
|
|
* @return Item
|
|
*/
|
|
public function includeOrder(Transaction $transaction): Item
|
|
{
|
|
return ($transaction->owner instanceof Transaction) ? $this->item($transaction->owner->owner->owner, new OrderTransformer) : $this->item($transaction->owner->owner, new OrderTransformer);
|
|
}
|
|
|
|
/**
|
|
* Include documents
|
|
* @param Transaction $transaction
|
|
* @return Collection
|
|
*/
|
|
public function includeDocuments(Transaction $transaction): Collection
|
|
{
|
|
return $this->collection($transaction->documents, new DocumentTransformer());
|
|
}
|
|
|
|
/**
|
|
* Get outstanding amount
|
|
* @param Transaction $transaction
|
|
* @return float
|
|
*/
|
|
public function getOutstandingAmount(Transaction $transaction): float
|
|
{
|
|
return (float)$transaction->amount - ($transaction->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount'));
|
|
}
|
|
|
|
/**
|
|
* Get floating amount
|
|
* @param Transaction $transaction
|
|
* @return float
|
|
*/
|
|
public function getFloatingAmount(Transaction $transaction): float
|
|
{
|
|
return (double)$transaction->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION, ApprovalStatus::PENDING_VERIFICATION])->sum('amount');
|
|
}
|
|
|
|
/**
|
|
* Include currency
|
|
* @param Transaction $transaction
|
|
* @return Item
|
|
*/
|
|
public function includeCurrency(Transaction $transaction): Item
|
|
{
|
|
return $this->item($transaction->currency, new CurrencyTransformer);
|
|
}
|
|
|
|
/**
|
|
* include original currency
|
|
* @param Transaction $transaction
|
|
* @return Item
|
|
*/
|
|
public function includeOriginalCurrency(Transaction $transaction): Item
|
|
{
|
|
return $this->item($transaction->original_currency, new CurrencyTransformer);
|
|
}
|
|
|
|
/**
|
|
* Include transaction details details
|
|
* @param Transaction $transaction
|
|
* @return Collection
|
|
*/
|
|
public function includeDetails(Transaction $transaction): Collection
|
|
{
|
|
return $this->collection($transaction->transactionDetails, new TransactionDetailTransformer());
|
|
}
|
|
|
|
/**
|
|
* include transactions
|
|
* @param Transaction $transaction
|
|
* @return Collection
|
|
*/
|
|
public function includeTransactions(Transaction $transaction): Collection
|
|
{
|
|
return $this->collection($transaction->transactions, new TransactionTransformer());
|
|
}
|
|
|
|
/**
|
|
* include payment attempts
|
|
* @param Transaction $transaction
|
|
* @return Collection
|
|
*/
|
|
public function includePaymentAttempts(Transaction $transaction): Collection
|
|
{
|
|
return $this->collection($transaction->transactions()->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION)->get(), new TransactionTransformer());
|
|
}
|
|
|
|
/**
|
|
* include payment history
|
|
* @param Transaction $transaction
|
|
* @return Collection
|
|
*/
|
|
public function includePaymentHistory(Transaction $transaction): Collection
|
|
{
|
|
return $this->collection($transaction->transactions()->payments()->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::COMPLETED, ApprovalStatus::REJECTED])->get(), new TransactionTransformer());
|
|
}
|
|
|
|
/**
|
|
* include remarks
|
|
* @param Transaction $transaction
|
|
* @return Collection
|
|
*/
|
|
public function includeRemarks(Transaction $transaction): Collection
|
|
{
|
|
return $this->collection($transaction->remarks, new RemarkTransformer());
|
|
}
|
|
}
|