$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()); } }