@php $statusOptions = [ ['value' => 'active', 'label' => 'Aktif'], ['value' => 'inactive', 'label' => 'Pasif'], ['value' => 'blocked', 'label' => 'Engelli'], ['value' => 'potential', 'label' => 'Potansiyel'], ]; $priorityOptions = [['value' => '1', 'label' => 'Öncelikli'], ['value' => '0', 'label' => 'Normal']]; $genderOptions = [['value' => 'male', 'label' => 'Erkek'], ['value' => 'female', 'label' => 'Kadın'], ['value' => 'other', 'label' => 'Diğer']]; $contactMethods = [['value' => 'email', 'label' => 'E-posta'], ['value' => 'phone', 'label' => 'Telefon'], ['value' => 'sms', 'label' => 'SMS']]; @endphp {{-- slim: minimal header — avatar yok, başlık + rozetler tek şeritte (sabit QV tasarımı) --}} @if($customer->customer_type === 'corporate') {{-- Şirket adı gerçek bir kolon ve kartın başlığı → ortak tıkla-düzenle kalıbı --}} @else {{ $customer->first_name }} {{ $customer->last_name }} @endif @if($customer->priority) @endif {{-- Header'da avatar yok (slim); yığın tutamağı ve görev çubuğu baş harfleri buradan okur --}} {{-- Durum rozeti: eski native select yerine ortak pil menüsü (drawer: data-qv-pillsel) --}} {{ $customer->status_label }} #{{ $customer->code }} @if($customer->blacklisted) KARA LİSTE @endif
TOPLAM SATIŞ {{ number_format($financial['total_spent'], 0, ',', '.') }} ₺
ÖDENEN {{ number_format($financial['total_paid'], 0, ',', '.') }} ₺
BAKİYE {{ number_format($financial['balance'], 0, ',', '.') }} ₺
{{-- Cari: ödeme alınmadan ne kadar satış yapılabileceği. Borçlandırma kapalıyken tutar yerine durum yazılır — "0 ₺" limitin dolu olduğu izlenimi verirdi. --}}
KULLANILABİLİR LİMİT @if($credit['allowed']) {{ $credit['symbol'] }}{{ number_format($credit['available'], 0, ',', '.') }} @else Kapalı @endif
{{-- Print button removed as requested --}} {{-- Sayaç: yüklenen belgeler + operasyonda üretilen yolcu belgeleri --}}
{{-- Künye solda, zaman tüneli sağda ve ikisi eşit genişlikte: sıralama order-* ile verilir, böylece dar ekranda da müşteri bilgileri önce gelir. --}}
{{-- Etkinlik yazma alanı: künye paneliyle aynı dil. Tür seçimi tek satır çip şeridi, gövde tek bir odaklanabilir kutu, alt bar sade. --}}
{{-- Gönderim ucu ve hesap varlığı formun üzerinde taşınır: drawer'da birden çok kart açık olabildiği için durum global bir değişkende tutulmaz. --}}
@csrf
{{-- E-posta kipi: kutu gerçek bir gönderme penceresine dönüşür. Üst kenardaki renk şeridi hangi posta kutusundan konuşulduğunu gösterir. --}}
@php // Gönderici profilleri (mail_identities): adres sabit kalır, // yalnızca From: başlığındaki görünen ad değişir. Seçenek değeri // mail modülüyle AYNI sözleşme (bkz. mail.js parseFromValue): // "12" → 12 no'lu hesabın kendi adı // "12:5" → 12 no'lu hesabın 5 no'lu profili // İkinci bir biçim icat edilmiyor ki iki kutu aynı değeri konuşsun. $mailAccounts->loadMissing('identities'); $mailFromGrouped = $mailAccounts->count() > 1; // tek hesapta grup başlığı gürültü $mailFirstAcc = $mailAccounts->first(); $mailFirstIdentity = $mailFirstAcc?->identities->firstWhere('is_default', true); $mailFromDefault = $mailFirstAcc ? ($mailFirstIdentity ? $mailFirstAcc->id.':'.$mailFirstIdentity->id : (string) $mailFirstAcc->id) : ''; @endphp
Kimden
Kime
Bilgi
{{-- Toplantı / ziyaret alanları --}}
{{-- Teklif / ödeme alanları --}}
{{-- E-posta gövdesi: zengin metin (yalnızca e-posta kipinde) --}}
Dosya {{-- İmza: mail modülündeki düğmenin aynısı — seçili gönderici profilinin imzası gövdenin sonuna eklenir. --}}
{{-- Hesap bağlı değilse e-posta kipi çalışmaz --}}
Gerçek e-posta göndermek için önce bir posta hesabı bağlayın. Mail modülü
{{-- Etkinlik akışı: künye paneliyle aynı dil — ince ray, tür rengiyle işaretli nokta, kutu içinde kutu yok. Gelen/giden postaların ayrı bir sekmesi YOKTUR: not, arama, WhatsApp kayıtlarıyla aynı akışta, aynı dilde görünürler ve satırın altında okunurlar. --}}
Etkinlik Akışı {{ $activityStats['total'] ?? 0 }} kayıt @if(($activityStats['mails'] ?? 0) > 0) {{ $activityStats['mails'] }} yazışma @endif @if(($activityStats['complaints'] ?? 0) > 0) {{ $activityStats['complaints'] }} açık şikayet @endif @if(($activityStats['mails'] ?? 0) > 0) {{-- Yedek/dışa aktarma: bu müşterinin yazışmaları, mail modülündeki aynı uçtan taşınabilir biçimlerde indirilir. --}}
@endif
{{-- Akış iki kaynağı birleştirir: elle girilen etkinlikler ve mail modülünden bu karta bağlanmış gelen/giden postalar (adres eşleşmesi + elle kurulan/zincirden türeyen bağlar). Posta satırına tıklamak gövdeyi satırın altında açar. --}}
@forelse($timeline as $entry) @if($entry['kind'] === 'mail') @include('components.quick-view.mail-flow-row', [ 'mail' => $entry['item'], 'linkId' => $entry['link_id'] ?? null, 'linkAuto' => $entry['link_auto'] ?? false, 'linkLabel' => $entry['link_label'] ?? null, 'detachable' => empty($entry['link_id']), ]) @continue @endif @php $activity = $entry['item']; @endphp @php $icon = match($activity->activity_type) { 'call' => 'phone', 'email' => 'envelope', 'meeting' => 'handshake', 'note' => 'sticky-note', 'booking' => 'cart-shopping', 'complaint' => 'triangle-exclamation', 'whatsapp' => 'whatsapp', 'sms' => 'comment-sms', 'offer' => 'tag', 'payment' => 'credit-card', 'visit' => 'map-marker-alt', default => 'circle-dot' }; $color = match($activity->activity_type) { 'call' => '#3b82f6', 'email' => '#ec4899', 'meeting' => '#10b981', 'note' => '#f59e0b', 'booking' => '#6366f1', 'complaint' => '#ef4444', 'whatsapp' => '#22c55e', 'sms' => '#8b5cf6', 'offer' => '#d946ef', 'payment' => '#10b981', 'visit' => '#64748b', default => '#64748b' }; $isBrandIcon = $activity->activity_type === 'whatsapp'; @endphp
{{ $activity->activity_type_label }} @if($activity->priority === 'urgent') Acil @endif
@if($activity->subject)
{{ $activity->subject }}
@endif @if($activity->description)

{{ $activity->description }}

@endif @if($activity->location || $activity->meeting_link || $activity->reference_no)
@if($activity->location) {{ $activity->location }} @endif @if($activity->meeting_link) Toplantıya katıl @endif @if($activity->reference_no) #{{ $activity->reference_no }} @endif
@endif
{{ $activity->performedBy?->first_name ?: 'Sistem' }} @if($activity->status) {{ $activity->status_label }} @endif
@empty Yukarıdaki kutudan not, arama veya e-posta ekleyin; Mail modülünden bir yazışmayı bu müşteriyle ilişkilendirirseniz o da burada görünür. @endforelse
{{-- Künye: profilin tamamı — tek satır görünüm, yerinde düzenleme, kopyalama. "Profil Bilgileri" sekmesi bu panelde birleştiği için ayrıca yoktur. --}}
@include('agency.customers.partials.qv-profile') {{-- Temsilci ataması --}}
Atanmış Temsilci
@if($customer->assignedAgent)
{{ $customer->assignedAgent->full_name }} Satış Temsilcisi
@else Atanmamış @endif @if(isset($agents) && $agents->isNotEmpty()) @endif
{{-- Kişi ↔ şirket bağı: drawer'dan bağlama/çözme --}} @include('agency.customers.partials.qv-links') {{-- Yorum & dahili notlar --}}
Yorum Alanı
{!! $customer->internal_notes !!}

Müşteri hakkında dahili notlar — yalnızca acentenize görünür.

@include('agency.customers.partials.qv-sales')
@include('agency.customers.partials.qv-documents')
@include('agency.customers.partials.qv-invoices')
@include('agency.payments.partials.payment-list', [ 'payments' => $payments, 'createUrl' => route('agency.payments.quick-create', ['customer' => $customer->id, 'direction' => 'in']), 'summary' => [ ['label' => 'Toplam Satış', 'value' => number_format($financial['total_spent'], 2, ',', '.') . '₺', 'tone' => 'neutral'], ['label' => 'Tahsil Edilen', 'value' => number_format($financial['total_paid'], 2, ',', '.') . '₺', 'tone' => 'ok'], ['label' => 'Kalan Bakiye', 'value' => number_format($financial['balance'], 2, ',', '.') . '₺', 'tone' => $financial['balance'] > 0 ? 'warn' : 'ok'], ['label' => 'Kullanılabilir Limit', 'value' => $credit['allowed'] ? $credit['symbol'] . number_format($credit['available'], 2, ',', '.') : 'Borçlandırma kapalı', 'tone' => $credit['allowed'] ? ($credit['available'] > 0 ? 'ok' : 'warn') : 'neutral'], ], 'emptyText' => 'Bu müşteriden henüz tahsilat girilmedi.', ])
@include('agency.customers.partials.qv-passengers') @include('agency.customers.partials.qv-tabs-styles')
{{-- Ortak katmanlar. Yazma kutusu (acx) ve akış (flw) stili activity-ui'de: bu kart onları doğrudan kullandığı için include'u KENDİSİ yapar, künye partial'ının etmesine bel bağlamaz. @once çift basmaz. --}} @include('components.quick-view.activity-ui') {{-- Akıştaki posta satırlarının stili ve satır içi okuyucusu --}} @include('components.quick-view.mail-ui') @include('components.quick-view.mail-reader')
Güncelleme: {{ $customer->updated_at->format('d.m.Y H:i') }}