🏢 Muzibu Corporate Sistemi

Sistem Mimarisi & Mevcut UI Analizi

v9 - Mimari Netleşti 26 Kasım 2025
🎯

1. Doğru Sistem Mimarisi

✅ ANLAŞILDı:

Her users = Ayrı bir premium üye (para öder)
Şubeler istedikleri zaman ana firmadan ayrılabilir
Her şube kendi başına ana firma olabilir

Senaryo 1: Bağlı Şubeler

👑 Starbucks Ana Şube (user_id: 100, parent_id: NULL)
├── Kadıköy Şubesi (user_id: 200, parent_id: 100)
├── Beşiktaş Şubesi (user_id: 201, parent_id: 100)
└── Şişli Şubesi (user_id: 202, parent_id: 100)

Özellik: Ana şube tüm şubelerin istatistiklerini görebilir.

Senaryo 2: Ayrılma

👑 Starbucks Ana Şube (user_id: 100, parent_id: NULL)
└── Beşiktaş Şubesi (user_id: 201, parent_id: 100)
🆓 Kadıköy Şubesi Bağımsız Oldu (user_id: 200, parent_id: NULL)
→ Artık kendi başına ana firma!

İşlem: Kadıköy'ün parent_id'si NULL yapılır → Ana firma olur.

Veritabanı Yapısı

Alan Tip Açıklama
id bigint Primary key
user_id bigint Her şube = Ayrı user (premium üye)
parent_id bigint (nullable) NULL = Ana firma, VALUE = Alt şube
company_name string Ana firma adı (örn: "Starbucks")
branch_name string (nullable) Alt şube adı (örn: "Kadıköy Şubesi")
corporate_code string (unique) Kurumsal kod (sadece ana firmada)
is_active boolean Aktif/Pasif durum

Kullanım Örnekleri

// Yeni Ana Firma Oluştur MuzibuCorporateAccount::create([ 'user_id' => 100, 'parent_id' => null, 'company_name' => 'Starbucks', 'branch_name' => null, 'corporate_code' => 'STB-X8K2M', ]); // Şube Ekle (Başka Bir User) MuzibuCorporateAccount::create([ 'user_id' => 200, // Farklı user! 'parent_id' => 1, // Ana firmaya bağlı 'company_name' => null, // Ana firmadan çekilir 'branch_name' => 'Kadıköy Şubesi', ]); // Şubeyi Bağımsızlaştır $branch = MuzibuCorporateAccount::find(2); $branch->update([ 'parent_id' => null, // Artık ana firma! 'company_name' => 'Kadıköy Coffee', // Kendi adını belirler 'corporate_code' => 'KDK-P9L3X', // Yeni kod ]);
🎨

2. Mevcut UI Analizi

✅ İyi Yönler (Korunacaklar)

✅ Tree-View Yapısı
Ana firma → Alt şubeler açılır/kapanır (Alpine.js)
✅ İki Panel Şube Yönetimi
Sol: Kullanılabilir userlar, Sağ: Bağlı şubeler
✅ Inline Edit
Şube adı direkt input'tan değiştirilebiliyor
✅ Arama & Filtreleme
Canlı arama, durum filtresi mevcut
✅ Livewire Integration
Reaktif UI, sayfa yenileme yok

❌ Sorunlar & Eksikler

❌ branch_name Kullanılmıyor!
View'de {{ $branch->company_name }} var, ama şube için branch_name olmalı!
❌ "Şube" Kavramı Karışık
Alt şubeler aslında başka user'lar. Bu açık değil.
❌ Ayrılma (Detach) Yok
Şubenin parent_id'yi NULL yapıp bağımsızlaşma özelliği yok
❌ İstatistik/Raporlar Eksik
Ana şubenin alt şubelerin istatistiklerini görmesi yok
❌ Yetki Kontrolü Yok
Ana şube → Hepsi, Alt şube → Sadece kendisi mantığı eksik
💡

3. Önerilen Değişiklikler

1️⃣ branch_name Alan Kullanımı

Sorun: View'de şubeler için company_name kullanılıyor ama database'de branch_name var!

Değişecek Dosya:
Modules/Muzibu/resources/views/admin/livewire/corporate-account-component.blade.php

Değişiklik:

// ÖNCE (YANLIŞ): <div class="fw-medium">{{ $branch->company_name }}</div> // SONRA (DOĞRU): <div class="fw-medium">{{ $branch->branch_name ?: 'İsimsiz Şube' }}</div> <small class="text-muted">{{ $branch->parent->company_name ?? '' }} şubesi</small>

2️⃣ Şubeyi Bağımsızlaştırma

Özellik: Alt şubenin ana firmadan ayrılıp kendi başına ana firma olması

// Livewire Component (CorporateAccountComponent.php) public function detachBranch(int $branchId): void { $branch = MuzibuCorporateAccount::find($branchId); if (!$branch || !$branch->parent_id) { return; } // Bağımsızlaştır $branch->update([ 'parent_id' => null, 'company_name' => $branch->branch_name, // Şube adını firma adı yap 'branch_name' => null, 'corporate_code' => MuzibuCorporateAccount::generateCode(), ]); $this->dispatch('toast', [ 'type' => 'success', 'message' => 'Şube bağımsızlaştırıldı' ]); }

UI: Şube satırına "Bağımsızlaştır" butonu ekle

3️⃣ İstatistik Yetkisi

Mantık: Ana şube → Tüm şubelerin istatistiği, Alt şube → Sadece kendisi

// Model Method (MuzibuCorporateAccount.php) public function canViewBranchStats($branchId): bool { // Ana şubeyse tüm alt şubelerini görebilir if ($this->isMainBranch()) { return $this->children()->where('id', $branchId)->exists(); } // Alt şubeyse sadece kendisini görebilir return $this->id === $branchId; } // Controller/Livewire'da kontrol if (!$account->canViewBranchStats($requestedBranchId)) { abort(403, 'Bu şubenin istatistiklerini görme yetkiniz yok'); }

4️⃣ UI İyileştirmeleri

  • Şube Badge: Ana firma yanında "Ana Şube", alt şube yanında "Alt Şube" badge'i
  • Hiyerarşi Görseli: Alt şubeler için indent + ok işareti
  • Tooltip: "Bu şube bağımsızlaşabilir" gibi bilgilendirici mesajlar
  • İstatistik Linki: Ana şube → "Tüm Şubeler Raporu" butonu
  • Yetki Göstergesi: Kullanıcının hangi şubeye ait olduğu açık görünsün

5️⃣ Workflow Önerisi

Adım Aksiyonlar
1. Ana Firma Oluştur • Kullanıcı seç (user_id)
• Firma adı gir
• Corporate kod oluştur
2. Şube Ekle • Başka bir user seç
• Şube adı gir (branch_name)
• Parent firma seç
• corporate_code NULL (ana firmadan devralır)
3. Şubeyi Yönet • Şube adı düzenle
• Aktif/Pasif yap
• İstatistikleri gör (yetki kontrolü)
• Bağımsızlaştır (opsiyonel)
4. Bağımsızlaştır • parent_id → NULL
• branch_name → company_name
• Yeni corporate_code oluştur
• Artık ana firma!
🎯

4. Sonuç ve Öneriler

✅ Mevcut UI Güçlü

  • Tree-view yapısı mükemmel
  • İki panel şube yönetimi sezgisel
  • Livewire reaktif güncellemeler
  • Arama/filtreleme çalışıyor
  • Inline edit kullanışlı

❌ Eksikler

  • branch_name kullanılmıyor
  • Bağımsızlaştırma yok
  • İstatistik yetkisi yok
  • Kavramlar net değil
  • Raporlama eksik
📋 YAPILACAKLAR ÖNCELİK SIRASINA GÖRE:

1️⃣ branch_name Düzeltmesi → View'lerde company_name yerine branch_name kullan
2️⃣ Bağımsızlaştırma Özelliği → detachBranch() method + UI butonu
3️⃣ Yetki Kontrolü → canViewBranchStats() implement et
4️⃣ UI Badge'ler → Ana/Alt şube göstergeleri
5️⃣ İstatistik Raporu → Ana şube tüm şubeleri görebilsin
💡 SONRAKİ ADIM:

Bu değişiklikleri admin panel UI'ına uygulayalım mı?
Yoksa önce başka bir analiz/düzenleme var mı?