Müşteri Alanları
Bu dokümantasyon, Serenay\B2B\Data\User nesnesinin tüm erişilebilir alanlarını ve metodlarını içerir. User nesnesi bg_uyeler tablosundaki her satıra (müşteri/kullanıcı) karşılık gelir ve Twig şablonlarında user değişkeni olarak kullanılabilir.
Tüm Müşteri Özellikleri
🔍
- 🏷️ Temel Bilgiler
- 📞 İletişim Bilgileri
- 💰 Finansal ve Vergi Bilgileri
- 🔐 Hesap Durumu
- 📊 İstatistikler
- 📅 Tarih Bilgileri
- 👥 Gruplar ve İzinler
- 🔗 İlişkili Nesneler
- 🗄️ Veritabanı Alanları
- 🛡️ Rol ve Erişim
- ⚙️ Özel Alanlar
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
id | id, kimlik, unique | int | Kullanıcı benzersiz ID'si | {{ user.id }} |
firma | firma, şirket, company | string | Firma adı | {{ user.firma }} |
yetkili | yetkili, isim, ad soyad | string | Yetkili kişi adı | {{ user.yetkili }} |
name | isim, name, ad | string | Kullanıcı adı (yetkili ile aynı) | {{ user.name }} |
title | ünvan, title, başlık | string | Kullanıcı ünvanı (yetkili ile aynı) | {{ user.title }} |
company_name | firma adı, company name | string | Firma adı (firma ile aynı) | {{ user.company_name }} |
mail | mail, email, e-posta | string | E-posta adresi | {{ user.mail }} |
bayi_kod | bayi kodu, müşteri kodu, seller code | string | Müşteri/bayi kodu | {{ user.bayi_kod }} |
seller_code | satıcı kodu, seller code | string | Satıcı kodu (bayi_kod ile aynı) | {{ user.seller_code }} |
kullaniciadi | kullanıcı adı, login, username | string | Kullanıcı adı (login) | {{ user.kullaniciadi }} |
avatar_character | avatar, baş harf, initials | string | Yetkili adının (yetkili) kelime baş harflerinden oluşan avatar metni | {{ user.avatar_character }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
telefon | telefon, phone, iletişim | string | sabittel (yalnızca null ise gsm); sütun NOT NULL olduğundan boş dize de olsa pratikte hep sabittel döner | {{ user.telefon }} |
sabittel | sabit telefon, landline | string | Sabit telefon | {{ user.sabittel }} |
gsm | cep telefonu, mobil, gsm | string | Cep telefonu | {{ user.gsm }} |
fax | faks, fax | string | Faks | {{ user.fax }} |
adres | adres, address | string | Adres | {{ user.adres }} |
sehir | şehir, city, il | string | Şehir (ham DB değeri) | {{ user.sehir }} |
ilce | ilçe, district | string | İlçe | {{ user.ilce }} |
ulke | ülke, country | string | Ülke (ham DB değeri) | {{ user.ulke }} |
city | şehir nesnesi, city object | Data\City | Şehir nesnesi (sehir id'sinden hasOne ile çözülür) | {{ user.city.name }} |
country | ülke nesnesi, country object | Data\Country | Ülke nesnesi (ulke id'sinden hasOne ile çözülür) | {{ user.country.name }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
vergidaire | vergi dairesi, tax office | string | Vergi dairesi | {{ user.vergidaire }} |
vergino | vergi no, tax number | string | Vergi numarası | {{ user.vergino }} |
tckimlik | tc kimlik, tc no, kimlik | string | TC kimlik numarası | {{ user.tckimlik }} |
iskonto | iskonto, indirim, discount | int | İskonto yüzdesi | {{ user.iskonto }} |
cari_acik_hesap | açık hesap, cari | int | Açık hesap durumu | {% if user.cari_acik_hesap %} |
currency | para birimi, currency, kur | string | Kullanıcının para birimi (company_group'un fiyat listesinden) | {{ user.currency }} |
min_order_amount | minimum sipariş, min tutar | float | Kullanıcının para birimine göre minimum sipariş tutarı (admin için 0) | {{ user.min_order_amount }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
durum | durum, aktif, pasif, status | int | Hesap durumu (0=pasif, 1=aktif — DURUM_AKTIF/DURUM_PASIF) | {{ user.durum }} |
is_active | aktif mi, is active | bool | Hesap aktif mi? (durum == DURUM_AKTIF) | {% if user.is_active %} |
yetki | yetki, rol, seviye | int | Yetki seviyesi (1=kullanıcı, ADMIN_USER_VALUE=admin) | {{ user.yetki }} |
is_admin | admin mi, yönetici | bool | Admin mi? (yetki == ADMIN_USER_VALUE) | {% if user.is_admin %} |
ozelbayi | özel bayi, special dealer | int | Özel bayi durumu | {% if user.ozelbayi %} |
logged_in_today | bugün giriş, login today | int | Bugün giriş yaptı mı? (0/1) | {% if user.logged_in_today %} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
toplam_siparis_adet | toplam sipariş adet, order count db | int | Toplam sipariş adedi (DB alanı) | {{ user.toplam_siparis_adet }} |
toplam_siparis_tutar | toplam sipariş tutar, order total | float | Toplam sipariş tutarı (DB alanı) | {{ user.toplam_siparis_tutar }} |
order_count | sipariş sayısı, order count | int | Sipariş sayısı (Orders::userOrderCount() ile hesaplanır) | {{ user.order_count }} |
basket_item_count | sepet, basket, cart count | int | Sepetteki ürün adedi (Cart::countCustomerItems() ile hesaplanır) | {{ user.basket_item_count }} |
favorite_count | favori, favorite count | int | Favori kayıt sayısı (FavoriteProducts::favoriteCount(), ürün durumuna bakmaz, önbelleksiz) | {{ user.favorite_count }} |
giris_adet | giriş adedi, login count | int | Giriş adedi | {{ user.giris_adet }} |
siparis_giris_adet | sipariş giriş adedi | int | Sipariş giriş adedi | {{ user.siparis_giris_adet }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
kayit_tarih | kayıt tarihi, register date | string | Kayıt tarihi (ham DB değeri) | {{ user.kayit_tarih }} |
register_date | kayıt tarihi, register date | string | Kayıt tarihi (kayit_tarih ile aynı) | {{ user.register_date }} |
son_tarih | son giriş, last login | string | Son giriş tarihi (ham DB değeri) | {{ user.son_tarih }} |
last_login_ago | son giriş, last login ago | string | Son giriş tarihi (son_tarih ile aynı) | {{ user.last_login_ago }} |
approved_at | onay tarihi, approved | string|null | Onaylanma tarihi | {{ user.approved_at }} |
last_order_date | son sipariş tarihi, last order | string|null | Son sipariş tarihi | {{ user.last_order_date }} |
sifre_tarih | şifre tarihi, password date | string|null | Son şifre değişim tarihi | {{ user.sifre_tarih }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
company_group_id | firma grubu id, company group id | int | Firma (fiyat) grubu ID'si | {{ user.company_group_id }} |
company_group | firma grubu, company group | CompanyGroup|null | Firma grubu nesnesi | {{ user.company_group.name }} |
tax_group_id | vergi grubu id, tax group id | int|null | Vergi grubu ID'si | {{ user.tax_group_id }} |
tax_group | vergi grubu, tax group | TaxGroup|null | Vergi grubu nesnesi | {{ user.tax_group.name }} |
order_limit_group_id | sipariş limit grubu id | int | Sipariş limit grubu ID'si (varsayılan 1) | {{ user.order_limit_group_id }} |
order_limit_group | sipariş limit grubu, order limit | OrderLimitGroup|null | Sipariş limit grubu nesnesi | {{ user.order_limit_group.limit_value }} |
permission_group_id | izin grubu id, permission group id | int|null | Ürün izin grubu ID'si | {{ user.permission_group_id }} |
permission_group | izin grubu, permission group | CustomerPermissionGroup|null | Ürün izin grubu nesnesi | {{ user.permission_group.name }} |
cargo_region_id | kargo bölgesi id, cargo region id | int|null | Kargo bölgesi ID'si | {{ user.cargo_region_id }} |
region_cargos | kargo firmaları, region cargos | Cargo[] | Kullanıcının bölgesine tanımlı kargo firmaları (cargo_region_id boşsa tüm kargolar) | {% for cargo in user.region_cargos %} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
address | adres nesnesi, checkout address | CheckoutAddress | En son eklenen sipariş adresi (siparis_adres.id DESC; yoksa CheckoutAddress::createFromUser() ile üretilir) | {{ user.address.adres }} |
fcm_token | fcm, push token, bildirim | string | Mobil bildirim tokeni (SermobilebossAuths::getUserToken()) | {{ user.fcm_token }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
sifre | şifre, password, hash | string | Şifre (hash'li, 32 karakter değilse Password::hash() ile hashlenir) | {{ user.sifre }} |
kayit_ip | kayıt ip, register ip | string | Kayıt IP adresi | {{ user.kayit_ip }} |
son_ip | son ip, last ip | string | Son giriş IP adresi | {{ user.son_ip }} |
kod | kod, unused | int | Kullanılmıyor (şemadan düşülene kadar 0) | {{ user.kod }} |
token | token, oturum, api token | string|null | Oturum/API tokeni (generateAndSaveToken() ile üretilir) | {{ user.token }} |
allowed_ips | izinli ip, allowed ips | string|null | İzinli IP listesi | {{ user.allowed_ips }} |
is_allowed_ip | ip izinli mi, is allowed ip | bool | İstek IP'si izinli mi? (allowed_ips + ADMIN_ALLOWED_IPS + whitelist) | {% if user.is_allowed_ip %} |
alan1 / alan2 | ek alan, serbest alan, custom | string|null | Serbest ek alanlar | {{ user.alan1 }} |
tags | etiket, tags | string | Etiketler | {{ user.tags }} |
ser_lang | dil, language, ser lang | string | Dil tercihi (varsayılan tr) | {{ user.ser_lang }} |
yonetici_not | yönetici notu, admin not | string | Yönetici notu (admin oturumunda değişince bg_sercrm_note'a otomatik not düşer; müşteri/CLI kaydında düşmez) | {{ user.yonetici_not }} |
yabanci_musteri | yabancı müşteri, foreign customer | int | Yabancı müşteri mi? | {% if user.yabanci_musteri %} |
tum_markalari_gorebilir | tüm markalar, all brands | int | Tüm markaları görebilir mi? | {% if user.tum_markalari_gorebilir %} |
kampanya_bilgilendirme | kampanya izni, marketing consent | int | Kampanya bilgilendirmesi izni | {% if user.kampanya_bilgilendirme %} |
satis_sozlesme | satış sözleşmesi, sales agreement | int | Satış sözleşmesi onayı | {% if user.satis_sozlesme %} |
sartlar | şartlar, terms | int | Şartlar onayı | {% if user.sartlar %} |
serfoto_yetki / serterminal_yetki / sermagaza_yetki / sersayim_yetki | modül yetkisi, module permission | int | Yan modül yetkileri | {% if user.serfoto_yetki %} |
diger | diğer, other | int | Diğer (kullanım amacı DB'de tanımsız) | {{ user.diger }} |
representative_id | plasiyer, representative id | int|null | Plasiyer ID'si | {{ user.representative_id }} |
register_channel_id | kayıt kanalı, register channel | int|null | Kayıt kanalı ID'si | {{ user.register_channel_id }} |
acquisition_channel / acquisition_source / acquisition_medium / acquisition_campaign | utm, kaynak, pazarlama kanalı | string|null | Kaydolduğu ziyaretin pazarlama kanalı/kaynağı/utm bilgileri | {{ user.acquisition_source }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
role | rol, role | string | getRole() — is_admin ise 'admin', aksi halde 'user' | {{ user.role }} |
admin_url | admin url, yönetici linki | string | Admin panelinde müşteri detay linki | {{ user.admin_url }} |
locale | locale, dil kodu | string | getLocale() — şu an her zaman boş döner | {{ user.locale }} |
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
custom | özel alan, custom field, tüm özel alanlar | array | Tüm özel alanlar (CustomFieldType::USER) | {{ user.custom.field_name }} |
custom_field_{key} | özel alan değeri, custom field value | mixed | Belirli bir özel alan değeri | {{ user.custom_field_theme }} |
customFieldValues | özel alan ham değer, custom field raw | array | Özel alan ham değerleri | {% for v in user.customFieldValues %} |
Public Metodlar
| Metod | Parametreler | Dönüş | Açıklama |
|---|---|---|---|
isSuperAdmin() | - | bool | yetki == ADMIN_USER_VALUE ve maili murat@serenay.net.tr olan tek hesap için true |
generateToken() | - | string | id + mail + sifre + time() üzerinden token üretir (kaydetmez) |
generateAndSaveToken() | - | string | Token üretip token alanına kaydeder, başarısızsa boş string döner |
getOrderNo($prfx = '') | string $prfx | string | Sipariş numarası üretir, aynı prefiks için istek içinde cache'lenir |
customValue($key) | string $key | string | Özel alan değerini getirir |
addPermission($permission_name) | string | static | bg_yetkiler'e yetki tanımlar (upsert) |
removePermission($permission_name) | string | static | Tanımlı bir yetkiyi kaldırır |
getPaymentTypes($cart) | Cart | PaymentType[] | Kullanıcı ve sepet için geçerli ödeme yöntemlerini döner (formüle göre filtreler) |
isValidPayment($paymentId, $cart) | int, Cart | bool | Belirli bir ödeme yönteminin bu kullanıcı/sepet için geçerli olup olmadığını kontrol eder |
completeBasket($type, $others, $disableFix) | string, array, bool | void | Kullanıcının sepetini siparişe dönüştürür |
logData() | - | array | Log için id, name, email döner |
Twig Kullanım Örnekleri
Kullanıcı Profil Kartı
<div class="user-profile">
<div class="avatar">{{ user.avatar_character }}</div>
<h2>{{ user.name }}</h2>
<p>{{ user.company_name }}</p>
<p>Müşteri Kodu: {{ user.bayi_kod }}</p>
<p>{{ user.mail }}</p>
</div>
Hesap Durumu ve Rozetler
<div class="account-status">
{% if user.is_active %}
<span class="badge badge-success">Aktif</span>
{% else %}
<span class="badge badge-danger">Pasif</span>
{% endif %}
{% if user.is_admin %}
<span class="badge badge-info">Yönetici</span>
{% endif %}
{% if user.ozelbayi %}
<span class="badge badge-warning">Özel Bayi</span>
{% endif %}
</div>
İstatistik Paneli
<div class="user-stats">
<div class="stat-card">
<h4>Toplam Sipariş</h4>
<p>{{ user.order_count }}</p>
</div>
<div class="stat-card">
<h4>Sepetteki Ürün</h4>
<p>{{ user.basket_item_count }}</p>
</div>
<div class="stat-card">
<h4>Favoriler</h4>
<p>{{ user.favorite_count }}</p>
</div>
</div>
Adres ve Kargo Seçimi
<form action="/checkout/save_address" method="post">
<input type="text" name="firma" value="{{ user.address.firma }}">
<input type="text" name="adres" value="{{ user.address.adres }}">
{% if user.region_cargos %}
<select name="cargo_id">
{% for cargo in user.region_cargos %}
<option value="{{ cargo.id }}">{{ cargo.title }}</option>
{% endfor %}
</select>
{% endif %}
</form>
Önemli Notlar
sehir ve ulke DB'de ham ID değerleridir; gösterim için city/country ilişkili nesnelerini kullanın.
currency, company_group'un bağlı olduğu fiyat listesinden gelir, tanımlı değilse sistem para birimine düşer.
min_order_amount: Admin kullanıcılar için her zaman0; diğerleri içinorder_limit_group'tan hesaplanır ve gerekiyorsa kullanıcının para birimine çevrilir.order_count/basket_item_count: Veritabanı sütunu değildir, nesne başına bir kez sorgulanıp önbelleğe alınır.favorite_count: Önbelleksizdir; her erişimdeFavoriteProducts::favoriteCount()ile yeni sayım sorgusu atar — döngü içinde tekrar tekrar okumaktan kaçının.address:hasOneilesiparis_adres.id DESCsırasında ilk (en son eklenen) adres döner; "varsayılan adres" bayrağı yoktur. Kayıtlı adres yoksaCheckoutAddress::createFromUser()ile boş bir adres nesnesi üretilir, DB'ye yazılmaz.- Özel Alanlar:
CustomFieldType::USERtipiyle tanımlı özel alanlarcustomvecustom_field_{key}üzerinden erişilir. - Şifre Alanı:
sifreher zaman hash'li tutulur; kayıt sırasında 32 karakter değilse otomatik hashlenir. - Yetki Sistemi: Basit
yetkialanının (1=kullanıcı, admin sabiti=admin) yanındabg_yetkilertablosu üzerinden ayrıntılı izin sistemi vardır.
Sıkça Sorulan Sorular (SSS)
telefon ile sabittel/gsm arasındaki fark nedir?
telefon, sabittel alanını döndürür; yalnızca sabittel null ise gsm'e düşer. sabittel sütunu veritabanında NOT NULL olduğundan pratikte telefon her zaman sabittel değerini verir. Cep telefonuna özel erişmek için doğrudan user.gsm kullanın.
is_active ve durum arasındaki fark nedir?
durum, veritabanındaki ham değerdir (0=pasif, 1=aktif). is_active, bu değeri DURUM_AKTIF sabitiyle karşılaştıran hazır bir bool döner. Şablonlarda koşul yazarken durum yerine is_active kullanmak daha okunaklıdır.
order_count her seferinde veritabanına mı gidiyor?
Hayır. order_count ve basket_item_count nesne başına bir kez hesaplanıp önbelleğe alınır; aynı user nesnesi üzerinde tekrar okumak ek sorgu oluşturmaz. Ancak favorite_count önbelleksizdir, her erişimde yeni sorgu çalıştırır.
Özel alanlara (custom fields) nasıl erişilir?
CustomFieldType::USER tipiyle tanımlı alanlara user.custom.alan_adi veya user.custom_field_alan_adi şeklinde erişilebilir. Ham değerler için user.customFieldValues kullanılabilir.
Kullanıcının adresine nasıl erişilir, varsayılan adres var mı?
user.address, kullanıcının en son eklediği sipariş adresini (siparis_adres.id DESC) döner. Ayrı bir "varsayılan adres" bayrağı yoktur. Hiç adres kaydı yoksa boş bir CheckoutAddress nesnesi üretilir (veritabanına yazılmaz).
Kaynaklar
İletişim ve Destek
Herhangi bir sorunla karşılaşırsanız veya yardıma ihtiyaç duyarsanız, destek ekibimizle iletişime geçebilirsiniz.