'Nou', 'contacted' => 'Contactat', 'no_answer' => 'Fără răspuns', 'scheduled' => 'Programat', 'converted' => 'Convertit', 'lost' => 'Pierdut', ]; public const SOURCES = [ 'manual' => 'Manual', 'call' => 'Apel', 'site' => 'Site', 'telegram' => 'Telegram', 'whatsapp' => 'WhatsApp', 'viber' => 'Viber', 'facebook' => 'Facebook', 'instagram' => 'Instagram', 'tiktok' => 'TikTok', 'google' => 'Google', 'google_maps' => 'Google Maps', 'seo' => 'SEO', 'recommend' => 'Recomandare', ]; protected $fillable = [ 'company_id', 'client_id', 'vehicle_id', 'name', 'phone', 'email', 'car', 'model', 'message', 'source', 'marketing_channel', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'status', 'budget', 'assigned_to', 'deal_id', 'contacted_at', 'converted_at', 'notes', ]; protected $casts = [ 'budget' => 'decimal:2', 'contacted_at' => 'datetime', 'converted_at' => 'datetime', ]; public function client(): BelongsTo { return $this->belongsTo(Client::class); } public function vehicle(): BelongsTo { return $this->belongsTo(Vehicle::class); } public function assignedTo(): BelongsTo { return $this->belongsTo(User::class, 'assigned_to'); } public function deal(): BelongsTo { return $this->belongsTo(Deal::class); } /** Convert lead → client + deal (idempotent if already converted). */ public function convert(?array $dealAttrs = null): Deal { if ($this->deal_id) { return $this->deal; } $client = $this->client_id ? $this->client : Client::firstOrCreate( ['company_id' => $this->company_id, 'phone' => $this->phone], ['type' => 'individual', 'name' => $this->name, 'email' => $this->email, 'source' => $this->source] ); $deal = Deal::create(array_merge([ 'company_id' => $this->company_id, 'client_id' => $client->id, 'name' => trim(($this->car ?? '') . ' ' . ($this->model ?? '')) ?: $this->name, 'price' => $this->budget, 'stage' => 'new', 'source' => $this->source, 'note' => $this->message, 'assigned_to' => $this->assigned_to, ], $dealAttrs ?? [])); $this->update([ 'client_id' => $client->id, 'deal_id' => $deal->id, 'status' => 'converted', 'converted_at' => now(), ]); return $deal; } }