# Hermes Bilişim Raporlama Sistemi - Yönetici (Admin) Kılavuzu

Bu kılavuz, sistemi yöneten, veritabanı bağlantılarını ayarlayan ve yeni raporlar tasarlayan **Admin (Yönetici)** yetkisine sahip kullanıcılar için hazırlanmıştır.

---

## 1. Veritabanı Bağlantıları (Connections)

Sistemin farklı veritabanlarından (ERP, CRM, Muhasebe) veri çekebilmesi için öncelikle bağlantı tanımları yapılmalıdır.
1. Sol menüden **"Bağlantılar"** (Connections) sekmesine tıklayın.
2. **Yeni Ekle** diyerek bir bağlantı oluşturun:
   - **Veritabanı Tipi:** MSSQL, MySQL veya PostgreSQL seçin.
   - **Sunucu / Host:** Veritabanı sunucusunun IP adresi veya adı (Örn: 192.168.1.100).
   - **Kullanıcı & Şifre:** Veritabanına bağlanacak kullanıcının bilgilerini girin. **Önemli Not:** Eğer raporlarınızda Ön-Sorgu (Pre-Query) kullanıp geçici tablolar (`#Temp`) oluşturacaksanız, bu kullanıcının geçici tablo oluşturma (Create Temp Table) yetkisi olması gerekir. Sadece düz `SELECT` sorguları kullanılacaksa salt okunur (read-only) bir kullanıcı da tanımlayabilirsiniz.

---

## 2. Kullanıcı Yönetimi ve Yetkilendirme

Sistemi kullanacak kişilerin tanımlandığı ve yetkilendirildiği alandır.
1. Menüden **"Kullanıcılar"** sayfasına girin.
2. **Yeni Kullanıcı Ekle** butonu ile personelinizi tanımlayın.
   - **Roller:** `Admin` (Tüm yetkilere sahip), `Power User` (Rapor tasarlayabilen) ve `User` (Sadece raporları görüntüleyebilen) rollerinden birini seçin.
   - **Firma / Kullanıcı Kodları:** ERP sisteminizdeki satış temsilcisi kodu (Örn: Satici01) gibi referansları `user_code_ref` alanına girebilir, raporları kişiye özel filtreleyebilirsiniz.

---

## 3. Rapor Yönetimi (Rapor Tasarlama)

Sistemin kalbi olan Rapor Yönetimi ekranı, sıfırdan rapor oluşturmanızı sağlar.

### a. Temel Tanımlar ve Sorgu
1. **Rapor Adı ve Kategori:** Raporun hangi menü altında çıkacağını belirler.
2. **Yetkilendirme:** Raporu tüm kullanıcılara açabileceğiniz gibi, sadece belirli bir kullanıcıya veya belirli rollere de atayabilirsiniz.
3. **Bağlantı (Veritabanı):** Önceden tanımladığınız bağlantılardan birini seçin.
4. **SQL Sorgusu:** Raporun ana verisini çeken SQL sorgusunu yazın. 
   *(Örn: `SELECT urun_kodu, urun_adi, miktar FROM satis_faturasi`)*

### b. Dinamik Filtreler
Sorgunuzda dışarıdan parametre (tarih, cari kod vb.) almak için filtreler tanımlayabilirsiniz.
- SQL içine `{tarih1}` şeklinde değişkenler yazın.
- Alt kısımdaki **Filtreler (Değişkenler)** tablosuna değişken adını (örn: `tarih1`), veri tipini (Tarih, Metin, Sayı) ve ekranda görünecek etiketini (Örn: Başlangıç Tarihi) girin.
- Kullanıcılar bu filtreleri değiştirdikçe SQL yeniden çalışır.

### c. Ön-Sorgu (Pre-Query)
Eğer ana sorgunuz çalışmadan önce veritabanında geçici tablolar (`#TempTable`) oluşturmanız veya bazı değişkenleri (`SET @StartDate = ...`) tanımlamanız gerekiyorsa bu alanı kullanın. **Güvenlik İhlali** almamak adına, rapor içinde kullandığınız `DROP TABLE` komutları sadece `#` ile başlayan geçici tablolar için geçerlidir.

### d. Sorguyu Test Etme
- Gerekli SQL'i yazdıktan sonra sayfanın altındaki **Sorguyu Test Et** butonuna basın.
- Sistem SQL'i çalıştırır, varsa hataları gösterir. Başarılı ise sorgunuzdan dönen **Kolonlar** listelenir ve veritabanından dönen **İlk 10 Örnek Satır** size tablo halinde gösterilir. Böylece sorgunuzun doğruluğunu görebilirsiniz.

---

## 4. Gelişmiş Rapor Özellikleri

Test aşamasını geçtikten sonra, raporun tasarımına ve davranışlarına yön verebilirsiniz.

### a. Kolon Formatları
Sorgudan gelen her kolon için ayrı ayrı ayar yapabilirsiniz:
- **Görünüm Adı (Alias):** `u_kodu` yerine "Ürün Kodu" yazabilirsiniz.
- **Veri Tipi ve Format:** Parasal değerler için "Sayı" seçip "1.000,00" formatını seçerseniz, rapor ekranında ve yazdırma çıktılarında kuruş hassasiyetleri tam olarak gösterilir.
- **Gizlilik:** ID gibi kullanıcı için anlamsız ama sistem için gerekli kolonları "Görünür: Hayır" olarak işaretleyebilirsiniz.

### b. Ek Veri Kaynakları (Data Blending / Join)
Eğer MSSQL'deki sipariş verisi ile MySQL'deki kargo verisini birleştirmek istiyorsanız:
1. **Yardımcı Sorgular (Ek Veri)** bölümüne gidin.
2. Farklı bir veritabanı bağlantısı seçip SQL sorgunuzu yazın.
3. Ana sorgudaki eşleşecek sütunu (Örn: siparis_id) ve Yardımcı sorgudaki sütunu belirleyin.
4. **Görünüm Modu:**
   - *Ana Tabloya Birleştir (Blend):* Yardımcı veriler, sanki aynı veritabanından geliyormuş gibi ana tabloya yan sütün olarak eklenir.
   - *Tıklanınca Detayda Göster (Spotlight):* Kullanıcı satıra tıkladığında, o satırın detayı olarak altta yeni bir tabloda (Örn: Siparişin hareketleri) açılır.

### c. Koşullu Biçimlendirme (Conditional Formatting)
Hedefleri tutturanları veya eksi bakiyeleri vurgulamak için kurallar tanımlayabilirsiniz. 
- Örn: `Bakiye < 0 ise Satırın Arka Planını Kırmızı yap.`

### d. Pivot Table (Özet Tablo)
Kullanıcı raporu açtığında varsayılan olarak Excel benzeri bir Pivot Tablo (Sürükle bırak) görmek istiyorsanız "Varsayılan Pivot Modu" nu açabilirsiniz. Hangi kolonların satırda, hangilerinin değerlerde toplanacağını belirtebilirsiniz.

---

## 5. Performans ve Önbellekleme (Caching)

Özellikle çok ağır (milyonlarca satırlık) raporlar sistemi veya ERP'yi yorabilir.
- Rapor ayarlarından **Veriyi Arka Planda Topla (Önbellekleme)** seçeneğini işaretlerseniz, sistem veriyi kendi içine (MySQL - Cache tablosuna) kopyalar (Materialized View mantığı).
- Kullanıcılar raporu çektiklerinde doğrudan bu cache tablosundan okur (Milisaniyeler içinde). Cache'in yenilenme sıklığını (Örn: Her 1 saatte bir) belirleyebilirsiniz.

---

## 6. Zamanlanmış Raporlar (Scheduler / Cron)

Sistemin otomatik mail atmasını istiyorsanız:
1. Rapor yönetimi ekranında alt kısımdan **Zamanlanmış Görevler** sekmesine gidin.
2. Mail atılacak kişileri (virgülle ayırarak) ve gönderim periyodunu (Her gün sabah 08:00 vb.) belirleyin.
3. Sistem o saat geldiğinde raporu Excel veya PDF'e çevirip ilgili kişilere otomatik gönderir. (Sunucuda `cron.php` ayarlanmış olmalıdır).
