'int', 'inquiry_id' => 'int', 'booking_id' => 'int', 'current_version_id' => 'int', 'created_by' => 'int', ]; // ── Beziehungen ────────────────────────────────────────────────────────── public function contact(): BelongsTo { return $this->belongsTo(Contact::class, 'contact_id'); } /** * Die Anfrage (Phase 2 heißt die Tabelle `inquiries`, das Eloquent-Model * ist weiterhin `Lead` — Umbenennung des Models ist eigenes Ticket). */ public function inquiry(): BelongsTo { return $this->belongsTo(Lead::class, 'inquiry_id'); } public function booking(): BelongsTo { return $this->belongsTo(Booking::class, 'booking_id'); } public function versions(): HasMany { return $this->hasMany(OfferVersion::class, 'offer_id')->orderBy('version_no'); } public function currentVersion(): BelongsTo { return $this->belongsTo(OfferVersion::class, 'current_version_id'); } public function createdBy(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); } // ── Scopes ─────────────────────────────────────────────────────────────── /** Nur noch nicht abgeschlossene Angebote (draft + sent). */ public function scopeOpen(Builder $query): Builder { return $query->whereIn('status', self::OPEN_STATUSES); } public function scopeForContact(Builder $query, int $contactId): Builder { return $query->where('contact_id', $contactId); } /** * @param string[] $stati */ public function scopeWithStatus(Builder $query, array $stati): Builder { return $query->whereIn('status', $stati); } // ── Hilfsmethoden ──────────────────────────────────────────────────────── public function isEditable(): bool { return $this->status === self::STATUS_DRAFT; } public function isOpen(): bool { return in_array($this->status, self::OPEN_STATUSES, true); } }