payment_purpose !== null) { return $this->payment_purpose; } $subject = $this->type === InvoiceType::INVOICE_TYPE_PARTICIPATION_REFUND ? 'Beitragserstattung' : 'Auslagenerstattung'; return $subject . ' Belegnummer ' . $this->invoice_number; } /** * Wofür der Beleg steht -- der "Zahlungsgrund" der Beleglisten und der "Zweck" der EüR-Anlage. * * `type_other` ("Was wurde eingekauft") trägt seit der Pflichtangabe zu jeder Abrechnung den Zweck. * Bei Fahrtkosten bleibt das Feld leer: dort schreibt der Einreiche-Flow die Strecke nach * `travel_direction`. Den Zweck trägt dann der Reisegrund, ergänzt um den Namen der reisenden * Person -- bei einer Fahrt ist "wer" Teil der Begründung, nicht bloß Kontaktangabe. * * Ältere Belege und Beitragserstattungen haben nichts davon gesetzt; dann bleibt der Text leer. * Ein "--" würde in einer Belegliste nur Platz kosten. */ public function purposeText() : string { $parts = $this->type === InvoiceType::INVOICE_TYPE_TRAVELLING ? [$this->travel_reason, $this->contact_name] : [$this->type_other]; $parts = array_map(fn ($part) => trim((string) $part), $parts); return implode(' — ', array_filter($parts, fn ($part) => $part !== '')); } public function costUnit() : BelongsTo{ return $this->belongsTo(CostUnit::class); } public function status() : BelongsTo { return $this->belongsTo(InvoiceStatus::class, 'status')->first(); } public function invoiceType() : InvoiceType { return $this->belongsTo(InvoiceType::class, 'type', 'slug')->first(); } public function approvedBy() : ?User { return $this->belongsTo(User::class, 'approved_by')->first(); } }