owner instanceof Transaction) { if ($this->owner) { if ($this->owner->owner) { $order = new OrderResource($this->owner->owner->owner); } } } else if (!($this->owner instanceof Transaction) && !($this->owner instanceof Wallet)) { if ($this->owner) { $order = new OrderResource($this->owner->owner); } if($this->groups){ $group_payment_attempts = GroupForOrderV2Resource::collection($this->groups->whereNotIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])); $group_payment_expired = GroupForOrderV2Resource::collection($this->groupsWithTrashed->whereIn('status', [ApprovalStatus::EXPIRED])); $group_payment_history = GroupForOrderV2Resource::collection($this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::REJECTED])); } } else { $group = Group::where('reference', $this->payment_reference)->first(); if ($group) { $groupTransactions = GroupTransactionResource::collection($group->groupTransactions); } } $ts = $this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION])->last(); if ($ts) { $paymentTransaction = Transaction::where('payment_reference', $ts->reference)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION])->first(); if($paymentTransaction){ $groupTotalAmount = (double) $this->amount; //cief todo: 58 foreach ($group_payment_history as $key => $value) { if ($value->id === $ts->id && $value->reference === $ts->reference) { unset($group_payment_history[$key]); } } foreach ($group_payment_attempts as $key => $value) { if ($value->id === $ts->id && $value->reference == $ts->reference) { $groupPaymentAttemptsFiltered[$key] = $value; } } } } return [ 'id' => $this->id, 'owner_type' => $this->owner_type, 'order' => $order, 'group_transactions' => $groupTransactions, 'group_reference' => $groupTransactions ? ($group ? $group->reference : null ) : null, 'groups_payment_attempts' => $groupPaymentAttemptsFiltered, 'groups_payment_expired' => $group_payment_expired, 'groups_payment_history' => $group_payment_history, 'documents' => $groupTransactions ? DocumentResource::collection($this->documents->where('status', ApprovalStatus::PENDING_VERIFICATION)) : DocumentResource::collection($this->documents), 'type' => (int) $this->type, 'bill_no' => $this->bill_no, 'amount' => (double) $this->amount, //cief todo: 58 'payment_method' => (int) $this->payment_method, 'payment_reference' => $this->payment_reference, 'outstanding' => (double) $this->amount - ($this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount')), //cief todo: 58 'floating' => $group_payment_attempts ? $groupTotalAmount : (double) $this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION, ApprovalStatus::PENDING_VERIFICATION])->sum('amount'), 'service_charge' => (double) $this->service_charge, 'tax' => (double) $this->tax, 'original_amount' => (double) $this->original_amount, 'currency' => new CurrencyResource($this->currency), 'original_currency' => new CurrencyResource($this->original_currency), 'currency_rate' => (double) $this->currency_rate, 'status' => (int) $this->status, 'details' => TransactionDetailResource::collection($this->transactionDetails), 'transactions' => TransactionResource::collection($this->transactions), 'payment_attempts' => TransactionResource::collection( $this->transactions() ->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION) ->get() ), 'payments_expired' => TransactionResource::collection( $this->transactions() ->payments()->where('status', ApprovalStatus::EXPIRED) ->get() ), 'payment_history' => TransactionResource::collection( $this->transactions() ->payments() ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::COMPLETED, ApprovalStatus::REJECTED]) ->get() ), 'remarks' => RemarkResource::collection($this->remarks), 'storages' => $this->storages ? $this->storages : null, //from middleware 'is_waived' => (int) $this->is_waived, 'expires_on' => Carbon::parse($this->expires_on)->format('d-m-Y h:i:s A'), 'updated_at' => Carbon::parse($this->updated_at)->format('d-m-Y'), 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y') ]; } }