# Panel Fatura Ekranı Kancaları

https://dev.wisecp.com/tr/panel-fatura-ekrani-kancalari

Fatura, kasa ve kupon ekranlarının yirmi üç yerleşim noktası: fatura detayı, özet kartları, liste araç çubukları ve formlar.

## Genel Bakış

Fatura, kasa ve kupon ekranlarının yerleşim noktaları burada: fatura detayının bölümleri, liste araç çubukları ve kupon ile para birimi formları.

Fatura özet noktası size hesabı hazır verir: **kalan bakiye** ve **yapılan toplam ödeme**. Kasa özetinde ise her değer iki biçimde gelir; hesap yapacaksanız ham olanı kullanın.

## Referans

### Fatura başlığına rozet ya da buton

uiadmin.invoices_detail.header_actions

`admin/invoices/detail` başlık alanı

Fatura detayının başlık satırında görünür. Muhasebe sistemindeki karşılığı ya da kendi kısa yolunuz için uygundur.

Parametreler 2

$invoicearrayAktif fatura kaydı.

$invoice_idintFaturanın kimliği.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_detail.header_actions', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Fatura özet kartının üstü

uiadmin.invoice_detail.summary_card_top

`admin/invoices/detail` bakiye hesabı elinizde

Özet kartının en üstünde görünür. Kalan bakiye ve yapılan ödeme toplamı elinizdedir.

Parametreler 4

$invoicearrayAktif fatura kaydı.

$invoice_idintFaturanın kimliği.

$balancefloatKalan bakiye. Sıfırdan büyükse fatura hâlâ ödenmemiş demektir; kısmi ödemede de dolu gelir.

$total_paidfloatYapılan toplam ödeme.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoice_detail.summary_card_top', 10,
    function ($invoice, $invoice_id, $balance, $total_paid) {
        // Kismi odemede de bakiye dolu gelir.
        if ($balance <= 0 || $total_paid <= 0) return null;

        return '<div class="alert alert-info">Kismi odeme</div>';
    });
```

### Fatura özetinin altı

uiadmin.invoices_detail.summary.bottom

`admin/invoices/detail` özet altı

Özet kartının kalemlerinden sonra görünür.

Parametreler 2

$invoicearrayAktif fatura kaydı.

$invoice_idintFaturanın kimliği.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_detail.summary.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Ödemeler bölümünün üstü

uiadmin.invoices_detail.payments.top

`admin/invoices/detail` ödeme listesi

Faturaya işlenmiş ödemelerin listesinin üstünde görünür.

Parametreler 3

$invoicearrayAktif fatura kaydı.

$invoice_idintFaturanın kimliği.

$paymentsarrayFaturaya ait ödeme kayıtları.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_detail.payments.top', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Fatura detayına yeni sekme

uiadmin.invoice_detail.tabs

`admin/invoices/detail` nesne, dizi değil

Fatura sekmeleri kurulduktan sonra çalışır. HTML döndürmezsiniz: sekmeyi nesnenin metoduna eklersiniz.

Parametreler 2

$tabobjectSekme nesnesi.

$invoicearrayTam fatura kaydı.

Dönüş 1

voidDönüş **kullanılmaz**. Bu nokta HTML göstermez.

Dinleyici PHP

```php
Hook::add('ui:admin.invoice_detail.tabs', 10, function ($tab, $invoice) {
    $tab->add('acme', 'Acme', Acme::renderTab((int) ($invoice['id'] ?? 0)));
});
```

### Fatura sayfasının en altı

uiadmin.invoices_detail.bottom

`admin/invoices/detail` sayfa sonu

Sayfanın en sonunda görünür.

Parametreler 2

$invoicearrayAktif fatura kaydı.

$invoice_idintFaturanın kimliği.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_detail.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Fatura listesi özet kartlarının yanı

uiadmin.invoices_list.stats

`admin/invoices` filtre sonrası veri

Listenin üstündeki özet kartlarının yanında görünür. Kendi kartınızı çekirdek kartların yanına koyarsınız.

Parametreler 1

$initial_statsarrayHesaplanmış özet verileri: ödenmemiş, ödenmiş ve vadesi geçmiş. Bu veri **özet filtresinden geçtikten sonraki** hâlidir: orada yaptığınız değişiklik burada görünür.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_list.stats', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Fatura listesinde tablodan önce

uiadmin.invoices_list.before_table

`admin/invoices` parametresiz

Fatura tablosunun hemen üstünde görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Fatura listesi araç çubuğu

uiadmin.invoice_list.toolbar

`admin/invoices` parametresiz

Fatura listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoice_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kasa araç çubuğu

uiadmin.invoices_cash.toolbar

`admin/money` parametresiz

Gelir gider defterinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_cash.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kasa listesinde tablodan önce

uiadmin.invoices_cash.before_table

`admin/money` parametresiz

Kasa tablosunun hemen üstünde görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_cash.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Düzenli gider listesinde tablodan önce

uiadmin.invoices_periodic_expenses.before_table

`admin/money` parametresiz

Düzenli gider tablosunun hemen üstünde görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_periodic_expenses.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Düzenli gider araç çubuğu

uiadmin.invoices_periodic_expenses.toolbar

`admin/money` parametresiz

Düzenli giderler listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_periodic_expenses.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kupon listesi araç çubuğu

uiadmin.coupon_list.toolbar

`admin/money` parametresiz

Kupon listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.coupon_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kupon listesinde tablodan önce

uiadmin.coupon_list.before_table

`admin/money` parametresiz

Kupon tablosunun hemen üstünde görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.coupon_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Para birimi listesi araç çubuğu

uiadmin.currency_list.toolbar

`admin/money` parametresiz

Para birimleri listesinin araç çubuğunda görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.currency_list.toolbar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Para birimi listesinde tablodan önce

uiadmin.currency_list.before_table

`admin/money` parametresiz

Para birimi tablosunun hemen üstünde görünür.

Parametreler 0

—Parametre almaz.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.currency_list.before_table', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kasa özetinin altı

uiadmin.invoices_cash.summary.after

`admin/money` ham ve biçimli birlikte

Gelir gider özetinin altında görünür.

Parametreler 1

$summaryarrayKasa özeti: gelir, gider ve bakiye. Her değer **iki biçimde** gelir: hesap için ham sayı, ekran için biçimlenmiş metin. Karşılaştırma yapacaksanız ham olanı kullanın.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_cash.summary.after', 10, function ($summary) {
    // Karsilastirmada HAM degeri kullanin, bicimli metni degil.
    if ((float) ($summary['balance'] ?? 0) >= 0) return null;

    return '<div class="alert alert-warning">Kasa eksi bakiyede</div>';
});
```

### Fatura oluşturma formundan önce

uiadmin.invoices_edit.before_content

`admin/invoices` müşteri sıfır olabilir

Elle fatura kesme formunun üstünde görünür.

Parametreler 1

$user_idintFaturanın kesileceği müşteri. Müşteri henüz seçilmemişse **sıfırdır**.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_edit.before_content', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Fatura oluşturma formundan sonra

uiadmin.invoices_edit.bottom

`admin/invoices` müşteri sıfır olabilir

Aynı formun altında görünür.

Parametreler 1

$user_idintFaturanın kesileceği müşteri. Müşteri henüz seçilmemişse **sıfırdır**.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.invoices_edit.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kupon formundan önce

uiadmin.coupon_edit.before_content

`admin/money` iki mod

Kupon ekleme ve düzenleme formunun üstünde görünür.

Parametreler 2

$coupon_idintKuponun kimliği; **eklemede sıfırdır**.

$isEditboolDüzenleme modunda mı olunduğu.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.coupon_edit.before_content', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kupon formundan sonra

uiadmin.coupon_edit.bottom

`admin/money` iki mod

Aynı formun altında görünür.

Parametreler 2

$coupon_idintKuponun kimliği; **eklemede sıfırdır**.

$isEditboolDüzenleme modunda mı olunduğu.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.coupon_edit.bottom', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

### Kupon özet sütunu

uiadmin.coupon_edit.summary_sidebar

`admin/money` yan sütun

Kupon formunun yanındaki özet sütununda görünür.

Parametreler 1

$coupon_idintKuponun kimliği; eklemede sıfırdır.

Dönüş 1

string|nullDöndürdüğünüz **HTML görünür**. Birden çok dinleyici varsa çıktılar öncelik sırasıyla art arda eklenir. Boş metin, `null` ve `false` atlanır: bir şey eklemek istemediğinizde `null` dönün. Çıktı kaçışsız girer — dışarıdan gelen değeri kendiniz temizleyin.

Dinleyici PHP

```php
Hook::add('ui:admin.coupon_edit.summary_sidebar', 10, function () {
    return '<div class="alert alert-info">Acme</div>';
});
```

## Tuzaklar

> **Biçimli değerle hesap yapmayın**
> 
> Kasa özetinde her tutar iki biçimde bulunur: ham sayı ve ekrana yazılacak **biçimlenmiş metin**. Metin binlik ayracı ve para birimi simgesi taşır; onu sayıya çevirip karşılaştıran bir dinleyici, ayracın bulunduğu her tutarda yanlış sonuç üretir.

> **Dolu bakiye "hiç ödenmedi" demek değildir**
> 
> Fatura özetindeki kalan bakiye **kısmi ödemede de doludur**. "Bakiye varsa ödeme yapılmamıştır" varsayan bir dinleyici, yarısı ödenmiş faturayı ödenmemiş sayar. Yapılan toplam ödemeye de bakın.

## İlgili Makaleler

- [Fatura Yaşam Döngüsü Kancaları](https://dev.wisecp.com/tr/fatura-yasam-dongusu-kancalari)
- [Fatura Tutar Kancaları](https://dev.wisecp.com/tr/fatura-tutar-kancalari)
- [Yönetim Paneli Kancaları](https://dev.wisecp.com/tr/yonetim-paneli-kancalari)
