accountOwner) && filled($this->accountIban); } /** Ob sofort eingereicht wird -- entweder liegt die Bankverbindung vor, oder es wird gespendet. */ public function submitsDirectly(): bool { return $this->hasBankDetails() || $this->donation; } /** * Der Betrag, der beim Verband bleibt. * * Die halbe Cent-Toleranz fängt die Rundung des gespeicherten Floats ab -- ohne sie entstünden * Restbeträge von Bruchteilen eines Cents, die eine Begründung verlangen würden. */ public function retainedAmount(): float { $paid = $this->participant->amount_paid?->getAmount() ?? 0.0; $remaining = round($paid - $this->amount->getAmount(), 2); return $remaining > 0.005 ? $remaining : 0.0; } public function hasRetention(): bool { return $this->retainedAmount() > 0.0; } }