$payload['transaction_id'], 'payment_id' => (int) $payload['payment_id'], 'transaction_date' => $payload['transaction_date'], 'amount' => (float) $payload['amount'], 'payment_method' => $payload['payment_method'], 'payment_status' => $payload['payment_status'] ?? 'Pending', 'transaction_fee' => $payload['transaction_fee'] ?? null, 'payment_reference' => $payload['payment_reference'] ?? null, 'is_full_payment' => ! empty($payload['is_full_payment']), 'school_year' => $payload['school_year'] ?? null, 'semester' => $payload['semester'] ?? null, ]; $columns = array_flip(Schema::getColumnListing('payment_transactions')); return PaymentTransaction::query()->create(array_intersect_key($data, $columns)); } public function getByPayment(int $paymentId): array { return PaymentTransaction::getTransactionsByPaymentId($paymentId); } public function updateStatus(string $transactionId, string $status): bool { return PaymentTransaction::updateTransactionStatus($transactionId, $status); } }