@extends('agency.layouts.app') @section('title', 'Müşteriler') @section('page_title', 'Müşteri Yönetimi') @php $breadcrumbs = [ ['title' => 'Dashboard', 'url' => route('agency.dashboard')], ['title' => 'Müşteri Yönetimi', 'url' => ''] ]; $sort = request('sort', 'created_at'); $dir = request('dir', 'desc'); // -- Standart kolonlar $columns = [ ['key' => 'name', 'label' => 'Müşteri', 'sortable' => true, 'sort' => 'first_name'], ['key' => 'contact', 'label' => 'İletişim'], ['key' => 'type', 'label' => 'Tip', 'sortable' => true, 'sort' => 'customer_type', 'align' => 'center'], ['key' => 'status', 'label' => 'Durum', 'sortable' => true, 'sort' => 'status', 'align' => 'center'], ['key' => 'priority', 'label' => 'Öncelik', 'sortable' => true, 'sort' => 'priority', 'align' => 'center'], ['key' => 'passengers', 'label' => 'Yolcular', 'align' => 'center'], ['key' => 'loyalty', 'label' => 'Sadakat', 'align' => 'center'], ['key' => 'credit', 'label' => 'Cari Limit', 'sortable' => true, 'sort' => 'credit_limit', 'align' => 'center'], ]; // -- Müşteri kartındaki alanlar: varsayılan gizli, tablo ayarlarından açılır. // Ayarlar panelinden sıralanabilir; "Görünümü Kaydet" ile kişisel ya da // acente geneli düzen olarak saklanır. $cardColumns = [ ['key' => 'kart_kimlik', 'label' => 'T.C. Kimlik', 'get' => fn ($c) => $c->national_id], ['key' => 'kart_pasaport', 'label' => 'Pasaport No', 'get' => fn ($c) => $c->passport_number], ['key' => 'kart_pas_gecerlilik','label' => 'Pasaport Geçerlilik','get' => fn ($c) => $c->passport_expiry ? \Carbon\Carbon::parse($c->passport_expiry)->format('d.m.Y') : null], ['key' => 'kart_dogum', 'label' => 'Doğum Tarihi', 'get' => fn ($c) => $c->birth_date ? \Carbon\Carbon::parse($c->birth_date)->format('d.m.Y') : null], ['key' => 'kart_dogum_yeri', 'label' => 'Doğum Yeri', 'get' => fn ($c) => $c->birth_place], ['key' => 'kart_cinsiyet', 'label' => 'Cinsiyet', 'get' => fn ($c) => match ($c->gender) { 'male' => 'Erkek', 'female' => 'Kadın', 'other' => 'Diğer', default => null }], ['key' => 'kart_uyruk', 'label' => 'Uyruk', 'get' => fn ($c) => $c->nationality], ['key' => 'kart_tel_alt', 'label' => 'Telefon 2', 'get' => fn ($c) => $c->phone_alt], ['key' => 'kart_eposta_alt', 'label' => 'E-posta 2', 'get' => fn ($c) => $c->email_alt], ['key' => 'kart_adres', 'label' => 'Adres', 'get' => fn ($c) => $c->address], ['key' => 'kart_sehir', 'label' => 'Şehir', 'get' => fn ($c) => $c->city], ['key' => 'kart_ilce', 'label' => 'İlçe', 'get' => fn ($c) => $c->district], ['key' => 'kart_ulke', 'label' => 'Ülke', 'get' => fn ($c) => $c->country], ['key' => 'kart_posta_kodu', 'label' => 'Posta Kodu', 'get' => fn ($c) => $c->postal_code], ['key' => 'kart_firma_tip', 'label' => 'Şirket Tipi', 'get' => fn ($c) => $c->company_type], ['key' => 'kart_vergi_no', 'label' => 'Vergi No', 'get' => fn ($c) => $c->company_tax_number], ['key' => 'kart_vergi_dairesi','label' => 'Vergi Dairesi', 'get' => fn ($c) => $c->company_tax_office], ['key' => 'kart_gorev', 'label' => 'Görev / Pozisyon', 'get' => fn ($c) => $c->company_position], ['key' => 'kart_fatura_adres', 'label' => 'Fatura Adresi', 'get' => fn ($c) => $c->billing_address], ['key' => 'kart_fatura_eposta','label' => 'Fatura E-postası', 'get' => fn ($c) => $c->billing_email], ['key' => 'kart_iletisim', 'label' => 'İletişim Tercihi', 'get' => fn ($c) => $c->preferred_contact_method], ['key' => 'kart_segment', 'label' => 'Segment', 'get' => fn ($c) => $c->customer_segment], ['key' => 'kart_kaynak', 'label' => 'Referans Kaynağı', 'get' => fn ($c) => $c->referral_source], ['key' => 'kart_toplam_rez', 'label' => 'Rezervasyon', 'get' => fn ($c) => $c->total_bookings, 'align' => 'center'], ['key' => 'kart_toplam_harcama','label' => 'Toplam Harcama', 'get' => fn ($c) => $c->total_spent ? number_format((float) $c->total_spent, 2, ',', '.') . ' ₺' : null, 'align' => 'end'], ['key' => 'kart_bakiye', 'label' => 'Bakiye', 'get' => fn ($c) => $c->current_balance ? number_format((float) $c->current_balance, 2, ',', '.') . ' ₺' : null, 'align' => 'end'], ['key' => 'kart_kredi_limiti', 'label' => 'Kredi Limiti', 'get' => fn ($c) => $c->credit_limit ? number_format((float) $c->credit_limit, 2, ',', '.') . ' ₺' : null, 'align' => 'end'], ['key' => 'kart_vade', 'label' => 'Vade (gün)', 'get' => fn ($c) => $c->payment_term_days, 'align' => 'center'], ['key' => 'kart_ilk_rez', 'label' => 'İlk Rezervasyon', 'get' => fn ($c) => $c->first_booking_date ? \Carbon\Carbon::parse($c->first_booking_date)->format('d.m.Y') : null], ['key' => 'kart_son_rez', 'label' => 'Son Rezervasyon', 'get' => fn ($c) => $c->last_booking_date ? \Carbon\Carbon::parse($c->last_booking_date)->format('d.m.Y') : null], ['key' => 'kart_puan', 'label' => 'Sadakat Puanı', 'get' => fn ($c) => $c->loyalty_points, 'align' => 'center'], ['key' => 'kart_etiketler', 'label' => 'Etiketler', 'get' => fn ($c) => is_array($c->tags) ? implode(', ', $c->tags) : $c->tags], ['key' => 'kart_notlar', 'label' => 'İç Notlar', 'get' => fn ($c) => $c->internal_notes], ]; foreach ($cardColumns as $cc) { $columns[] = [ 'key' => $cc['key'], 'label' => $cc['label'], 'align' => $cc['align'] ?? 'start', 'visible' => false, ]; } // -- Listede gösterilen özel alanlar → dinamik kolon foreach ($listableFields as $field) { $columns[] = ['key' => 'cf_' . $field->field_key, 'label' => $field->label]; } $columns = array_merge($columns, [ ['key' => 'agent', 'label' => 'Temsilci'], ['key' => 'created', 'label' => 'Kayıt', 'sortable' => true, 'sort' => 'created_at', 'align' => 'center'], ['key' => '_actions', 'label' => 'İşlemler', 'fixed' => true, 'align' => 'end', 'width' => '90px'], ]); // -- Standart filtreler $filters = [ ['key' => 'status', 'label' => 'Durum', 'value' => request('status'), 'placeholder' => 'Tüm Durumlar', 'options' => [ 'active' => 'Aktif', 'inactive' => 'Pasif', 'blocked' => 'Engellenmiş', 'potential' => 'Potansiyel', ]], ['key' => 'type', 'label' => 'Tip', 'value' => request('type'), 'placeholder' => 'Tüm Tipler', 'options' => [ 'individual' => 'Kişiler', 'corporate' => 'Şirketler', ]], ['key' => 'priority', 'label' => 'Öncelik', 'value' => request('priority'), 'placeholder' => 'Tüm Öncelikler', 'options' => [ '1' => '⭐ Öncelikli', '0' => '⚪ Normal', ]], ['key' => 'credit', 'label' => 'Cari', 'value' => request('credit'), 'placeholder' => 'Tüm Müşteriler', 'options' => [ '1' => '💳 Borçlandırılabilir', '0' => '🚫 Borçlandırma Kapalı', ]], ]; // -- Filtrelenebilir özel alanlar → dinamik filtre foreach ($filterableFields as $field) { $key = 'cf_' . $field->field_key; if (in_array($field->field_type, ['select', 'multiselect'])) { $filters[] = [ 'key' => $key, 'label' => $field->label, 'value' => request($key), 'options' => collect($field->options ?? [])->mapWithKeys(fn($o) => [$o['value'] => $o['label']])->toArray(), ]; } elseif ($field->field_type === 'boolean') { $filters[] = ['key' => $key, 'label' => $field->label, 'value' => request($key), 'options' => ['1' => 'Evet', '0' => 'Hayır']]; } elseif ($field->field_type === 'date') { $filters[] = ['key' => $key, 'label' => $field->label, 'value' => request($key), 'type' => 'date']; } } @endphp @push('styles') @endpush @section('content')
Özel Alanlar @forelse($customers as $customer)
{{ $customer->initials }}
{{ $customer->full_name }} @if($customer->blacklisted) @endif
#{{ $customer->code }}
@if($customer->company_name)
{{ $customer->company_name }}
@endif
@if($customer->email)@endif @if($customer->phone)@endif @if(!$customer->email && !$customer->phone)@endif {{ $customer->customer_type === 'corporate' ? '🏢 Şirket' : '👤 Kişi' }} {{ $customer->status_label }} {{ $customer->priority_label }} {{ $customer->passengers_count }} @if($customer->loyalty_tier) {{ $customer->loyalty_tier_label }} @else @endif @php $cr = $credits[$customer->id] ?? null; @endphp @if($cr && $cr['allowed'] && $cr['limit'] > 0) {{ $cr['symbol'] }}{{ number_format($cr['available'], 0, ',', '.') }} / {{ $cr['symbol'] }}{{ number_format($cr['limit'], 0, ',', '.') }} @elseif($cr && $cr['allowed']) Limit yok @else Kapalı @endif {{-- Müşteri kartı alanları (varsayılan gizli) --}} @foreach($cardColumns as $cc) @php $cardVal = ($cc['get'])($customer); @endphp @if($cardVal !== null && $cardVal !== '') {{ $cardVal }} @else @endif @endforeach {{-- Özel alan kolonları --}} @foreach($listableFields as $field) @php $val = $customer->getCustomFieldValue($field->field_key); @endphp @if($val !== null && $val !== '') {{ $field->formatValue($val) }} @else @endif @endforeach @if($customer->assignedAgent)
{{ $customer->assignedAgent->first_name }}
@else Atanmamış @endif {{ $customer->created_at->format('d.m.Y') }}
@empty

Henüz müşteri yok

İlk müşterinizi ekleyerek başlayın.

@endforelse
{{-- Silme formu --}} @endsection @push('scripts') @endpush