'array', 'amount_cents' => 'integer', ]; } public function shopping_order(): BelongsTo { return $this->belongsTo(ShoppingOrder::class); } public function shopping_payment(): BelongsTo { return $this->belongsTo(ShoppingPayment::class); } public function consultant(): BelongsTo { return $this->belongsTo(User::class, 'consultant_user_id'); } /** @return array */ public static function eventLabels(): array { return [ 'checkout_visited' => 'Checkout aufgerufen', 'form_submitted' => 'Formular abgeschickt', 'payment_initiated' => 'Zahlung gestartet', 'payment_returned' => 'Zurück von PAYONE', 'payment_confirmed' => 'PAYONE Callback', ]; } public function getEventLabelAttribute(): string { return self::eventLabels()[$this->event] ?? $this->event; } /** * Classifies the domain into a human-readable source channel. * * - my.mivita.* → Salescenter (Berater-Bereich) * - in.mivita.* → Beraterzugang (in.mivita.care login) * - *.mivita.care → Kundenshop (Live) * - *.mivita.shop → Kundenshop (Live) * - *.mivita.test → Testserver */ public function getSourceTypeAttribute(): string { $domain = strtolower($this->domain ?? ''); if (str_starts_with($domain, 'my.')) { return 'salescenter'; } if (str_starts_with($domain, 'in.')) { return 'beraterzugang'; } if (str_ends_with($domain, '.test') || str_contains($domain, '.mivita.test')) { return 'testserver'; } if (str_ends_with($domain, '.care') || str_ends_with($domain, '.shop')) { return 'kundenshop'; } return 'unbekannt'; } /** @return array */ public static function sourceLabels(): array { return [ 'kundenshop' => 'Kundenshop (*.mivita.care / *.mivita.shop)', 'salescenter' => 'Salescenter (my.mivita.care)', 'beraterzugang' => 'Beraterzugang (in.mivita.care)', 'testserver' => 'Testserver (*.mivita.test)', 'unbekannt' => 'Unbekannt', ]; } }