İçeriğe geç

Özel modül

İhtiyacınız olan özellik, bir sonraki güncellemenin silemeyeceği bir modül olarak.

Çekirdek bir Blade dosyasını düzenlemek işe yarıyor — o dosyayı ezen sürüme kadar. Biz belgelenmiş genişletme noktaları üzerine kuruyoruz: observer, view composer, job, yetki. Teslim, kendi repo'nuzda özel bir modül; Türkçe ve İngilizce dizeler ilk commit'te yerinde.

Bu genelde iki şekilde başlıyor

Ya biri zaten özelleştirmiş ya da ihtiyacınız olan şey hiç yokmuş.

İkisi de yaygın. İkincisi Türkiye'de her yerden daha yaygın, çünkü boşluklar Türkiye biçiminde ve kimse doldurmamış.

İnsanların ilk denediği

  • Fatura oluşturma şablonunu kopyalayıp düzenledik. Güncelleme üzerine yazdı.
  • Giriş sayfasını değiştirdik. Sürüm yükseltmesinden sonra eski hali geri geldi.
  • Biri doğrudan veritabanına bir kolon ekledi, şimdi oraya hiçbir şey yazılmıyor.
  • Bir bileşeni modülden ezmeye çalıştık, beklediğimiz gibi olmadı.
  • Cloud sürümünde yaptık, kaydetmiyor. Kendi sunucumuzda kaydediyordu.
  • Müşteri kartında yalnızca kafamızda var olan bir alan var.

Gerçekten eksik olan

  • Çek ve senet takibi. Hiçbir kategoride uygulaması yok.
  • Müşteri başına gerçek bir cari ekstre; sadece kapanış tutarı değil.
  • Faturada tevkifat; e-Belgenin istediği kodlarla birlikte.
  • Barkod okutarak faturaya ürün eklemek.
  • Alacakta taksit takibi; neyin ne zaman ödendiğiyle.
  • Finansın gerçekten istediği o tek rapor; hiçbir rapor uygulaması üretmiyor.

Genişletme noktaları

Beş mekanizma. Kurduğumuz her şey bunları kullanıyor, başka bir şey kullanmıyor.

Bu bir felsefe değil, belgelenmiş API yüzeyi. Bunun dışında kurulan her şey, üzerine yazılmayı bekleyen bir dosya — ve o üzerine yazma her zaman sisteme ihtiyaç duyduğunuz bir günde geliyor.

Observer

Modülün kendi servis sağlayıcısında kaydedilen Eloquent observer'ları; sınıf Akaunting'in observer soyutlamasından türüyor. "Bir fatura oluşturulduğunda şunu da yap" mantığının yeri burası. Güncellemelerden sağ çıkıyor, çünkü onların dosyasında yapılmış bir değişiklik değil; belgelenmiş bir kancaya bağlanmış sizin dosyanız.

View composer

Forumdaki her "fatura ekranını kaybetmeden nasıl değiştiririm" sorusunun cevabı. Bir composer bir bölümü değiştirebiliyor, şablonun tamamını başkasıyla takas edebiliyor ya da mevcut bir yığına script ekleyebiliyor. Çekirdek Blade dosyaları geldiği gibi kalıyor; bir sonraki güncellemenin akılda kalıcı değil sıkıcı olmasının tek nedeni bu.

Job

Akaunting kayıt oluşturmayı, güncellemeyi ve silmeyi controller gövdesinde değil job'larla yapıyor; böylece aynı mantık REST API'den de konsoldan da erişilebilir oluyor. Biz de öyle yapıyoruz: parasını verdiğiniz özellik bir içe aktarmada, zamanlanmış bir işte ve bir entegrasyonda da çalışıyor — yalnızca çizildiği ekranda değil.

Laratrust yetkileri

Modülün kurulum dinleyicisinde kaydedilip rol adıyla değil yetki olarak kontrol ediliyor; çünkü kullanıcılarınız özel roller oluşturacak ve dokümantasyon bunu açıkça söylüyor. Bu adımı atlarsanız menü girişi görünüp tıklanınca 403 dönüyor — "modül bozuk" bildirimlerinin en yaygın nedenlerinden biri.

Menü, arama, rapor

Kenar menü girişleri yönetici ve müşteri portalı menü olaylarını ayrı ayrı dinleyerek; çünkü müşteri portalı farklı bir yüzey. Liste filtreleme, çekirdeğin birleştirip sonra sizin için hallettiği bir search-string yapılandırması vererek. Ayarlar, raporlar ve widget'lar modül manifestinde tanımlı. Bildirimsel ve tamamı sizin repo'nuzda.

Bir modül nasıl kuruluyor

Ücretli bir keşif, sonra sabit fazlar, sonra size ait bir repo.

Keşif bir satış adımı değil, bir teslimat. Şartnameyi okuyup yapmamaya karar verirseniz şartname sizde kalıyor — ve bunu öğrenmek için harcanabilecek en ucuz parayı harcamış olursunuz.

  1. 01

    Keşif ve yazılı şartname

    Ücretli, süresi belirli

    Kullanacak insanlarla oturuyoruz, kurulumunuzu okuyoruz ve modülün ne yaptığını, açıkça ne yapmadığını ve "bitti"nin ne anlama geldiğini yazıya döküyoruz. Sıfat değil, kabul kriteri.

  2. 02

    İskelet ve ilk dilim

    1. hafta

    Modül iskeleti, migration'lar, model ve baştan sona tıklayabileceğiniz bir çalışan yol. Şeyin biçimine dair tartışma burada, değiştirmek hâlâ ucuzken yapılıyor.

  3. 03

    Genişletme noktaları üzerine geliştirme

    Boyuta göre 2–8 hafta

    Observer, composer, job, yetki. Her seferinde baştan yazılmak yerine sürümler boyunca üzerine eklenecek şekilde tasarlanmış migration'lar. Başka bir sistemin okuması ya da yazması gerekiyorsa REST uçları.

  4. 04

    İlk günden Türkçe ve İngilizce

    Sonraki faz değil

    İki dil dosyası birlikte, çünkü dizeleri sonradan geçirmek yazmaktan pahalı. Modül PDF üretiyorsa buna Türkçe karakterleri olan bir yazı tipinin gömülmesi de dahil — DomPDF bunu kendiliğinden yapmıyor ve bozuk Latin dışı çıktı tek seferlik bir kaza değil, uzun süredir devam eden bir hata sınıfı.

  5. 05

    Repo'nuza teslim

    Fatura kapanmadan önce

    Modül kendi git repo'nuzda; kurulum ve yükseltme talimatları, sürüm geçmişi ve hangi çekirdek sürümüne karşı doğrulandığının yazılı notuyla. Pazar yeri onayı yok, gelir paylaşımı yok, kullanmaya devam etmek için bize yenileyeceğiniz hiçbir şey yok.

Devir paketinde ne var

  • Modülün kaynak kodu, sizin hesabınızdaki repo'nuzda
  • Takma adları, sağlayıcıları, ayarları, raporları ve widget'ları tanımlayan bir manifest
  • Bir daha değiştirilemeyecek tek bir dosya değil, sürümler için yazılmış migration'lar
  • Türkçe ve İngilizce dil dosyaları — kısmi değil, tam
  • Bize değil sizin sistem yöneticinize göre yazılmış kurulum ve yükseltme talimatları
  • Hangi çekirdek sürümüne karşı doğrulandığı, yazılı olarak
  • Bağlı olduğu her çekirdek davranışının listesi — yani güncellemeden sonra kontrol edilecek liste
  • Modülde varsa REST uçları ve yetkileri
Mesajınıza bir iş günü içinde dönüyoruz. Türkçe ve İngilizce.

Kapsam ve dürüstlük

Neyi kuruyoruz, neyi reddediyoruz ve kimsenin söylemediği süregelen maliyet.

Akaunting'in sürüm uyumluluğu politikası, kullanıcıların çekirdek sürümüyle birlikte çıkan modül sürümünü aldığını, dolayısıyla modül geliştiricilerinin geriye dönük uyumluluk tutmak zorunda olmadığını söylüyor. Bu Akaunting açısından makul ve sizin açısından tek bir şey demek: bakımı yapılmayan özel bir modülün üzerinde tarih var. Bunu bir modül almadan önce söylüyoruz ve uyumluluk anlaşmasını ilk güncelleme bir şeyi bozduktan sonra değil, geliştirmeyle birlikte teklif ediyoruz.

Bunu kuruyoruz

  • Kendi repo'nuzda, yalnızca belgelenmiş genişletme noktaları üzerine özel modül
  • Yeni varlıklar; kayıt işlemleriyle ve onları işe yarar kılan rapor ve widget'larla
  • Türkiye'ye özgü mantık: tevkifat, cari ekstre, çek ve senet takibi, TDHP'ye uygun raporlama
  • Modül olarak entegrasyonlar: yığında hazır duran ödeme kütüphanesi üzerine Türk ödeme kuruluşları, Türk e-ticaret ve pazar yeri senkronizasyonu, MT940 veya OFX banka ekstresi içe aktarma
  • Belge ve fatura PDF çıktısı; Türkçe karakterlerin gerçekten çıkması için yazı tipi gömülerek
  • Kendi sistemlerinizin çağıracağı REST uçları; yetkileri usulüne göre kaydedilerek

Bunu reddediyoruz

  • Çekirdek dosyaları ya da çekirdek Blade şablonlarını düzenlemek. Gerçekten tek yol buysa, yine de yapmak yerine bu özelliğin güvenle kurulamayacağını söylüyoruz.
  • Akaunting Cloud için özel modül. Özel kod pratikte kendi sunucunuza ait bir yetenek ve aksini varsaymak paranızı kaydetmeyecek bir şeye harcamak demek.
  • Akaunting'in markasını sökmek. Lisans yasaklıyor ve meşru yol White Label uygulaması.
  • Sürümler arasında yer değiştiren çekirdek davranışına bağlanan, bakım hattı olmayan bir modül. Teklif ediyoruz ve kabul etmezseniz ne olacağını açıkça söylüyoruz.
  • Müşteri işine App Store başvurusunun dahil edilmesi. Bu ayrı bir iş; inceleme süreci ve takvimi bizim elimizde değil.

Nasıl fiyatlanıyor

Keşif, sonra fazlar ve isteyip istemeseniz de teklif ettiğimiz bir anlaşma.

İki varlık ve bir rapor, faturalara kancalanan, belge basan ve API açan bir şeyden bambaşka bir hayvan. Fazlar, hangisine sahip olduğunuzu kimse bütünü için bir sayı vermeden önce söylüyor.

Keşif

Durum tespitinden sonra teklif

Süresi belirli ve ücretli. Çıktı, kabul kriterli yazılı bir şartname ve geliştirme için sabit bir fiyat. Sizde kalıyor ve başkasına da götürebilirsiniz.

  • 1–2 hafta
  • Teklif değil, şartname
  • Geliştirme bedelinden düşülüyor

Sabit fiyatlı fazlar

Durum tespitinden sonra teklif

Geliştirme, kendi kabul kriterleri olan fazlar hâlinde; böylece elinizde hiçbir zaman değerlendiremeyeceğiniz yarım bir şey olmuyor.

  • Küçük — bir varlık, kayıt işlemleri, bir rapor: 2–3 hafta
  • Orta — kesişen mantık ve özel PDF çıktısı: 4–8 hafta
  • Daha büyük işler keşiften sonra fazlara bölünüyor

Uyumluluk anlaşması

Durum tespitinden sonra teklif

Sürüm başına: modülünüz yeni çekirdeğe karşı yeniden doğrulanıyor ve çekirdek altından kaydıysa düzeltiliyor. İsteğe bağlı ve neden var olduğunun dürüst cevabı yukarıda yazıyor.

  • Her çekirdek sürümünde yeniden doğrulama
  • Bakım anlaşmasına dahil
  • Saat başına değil, modül başına fiyat
Faturayı kesen tüzel kişi: Lokum Tech LLC
Repo ve telif hakkı sizde
Kapsam gerçekten açık uçluysa günlük ücret seçeneği var
Her işten önce yazılı kapsam

Bu paketlerin başlangıç fiyatları netleşiyor. Görüşmede sorun; aralık değil, net bir sayı veriyoruz.

Net cevaplar

Modül sipariş etmeden önceki sorular.

Dosyayı düzenlesek olmaz mı? Şu an çalışıyor.
Çalışıyor ve o dosyayı değiştiren sürüme kadar çalışmaya devam edecek. Sonra birinin neyin değiştiğini hatırlaması, diff içinde bulması ve zaman baskısı altında yeniden yapması gerekiyor. Forumda tam bu durumda olan insanların yıllara yayılan başlıkları var; genelde fatura ekranı ya da giriş sayfası. Modül bir kez daha pahalı ve sonrasında bedava; düzenlenmiş bir çekirdek dosyası ise her güncellemede biraz, sonsuza kadar ve arada bir bir gün tutuyor.
Modül kimin?
İlk commit'ten itibaren sizin. Kendi hesabınızdaki özel bir repo'da duruyor, telif hakkı sizde ve gelir paylaşımı, pazar yeri kaydı ya da bize ödenen lisans ücreti yok. Birlikte çalışmayı bırakırsak elinizde çalışan bir modül, kurulum talimatları ve hangi çekirdek sürümüne karşı doğrulandığını söyleyen not kalıyor.
Akaunting App Store'a girebilir mi?
Girebilir ama bu ayrı bir iş ve genelde yanlış ilk hamle. Pazar yeri dağıtımı için onaylı bir geliştirici hesabı ve takvimi bizim elimizde olmayan bir inceleme süreci gerekiyor; üstelik tasarım brief'ini de değiştiriyor: App Store modülünün herkes için çalışması gerekir, bu da yalnızca sizin için çalışmasından pahalıdır. Müşteri işlerinde varsayılanımız özel modül. App Store yayını, kendi başına alınan bilinçli bir ürün kararı.
Bir sonraki güncellemeden sağ çıkar mı?
Çekirdeğe dokunmak yerine yalnızca belgelenmiş genişletme noktalarını kullanmamızın nedeni tam olarak bu. Ama dürüst cevabın bir şerhi var: Akaunting'in sürüm uyumluluğu politikası onu, modülünüzü çalışır tutmaktan açıkça muaf kılıyor; dolayısıyla çekirdek davranışına kancalanan bir modülün her sürümde yeniden doğrulanması gerekiyor. Bağlı olduğu davranışların listesini size veriyoruz ve onları kontrol eden anlaşmayı teklif ediyoruz. Anlaşmayı istememek makul bir tercih; varlığını bilmemek değil.
Bunu Akaunting Cloud hesabımız için yapabilir misiniz?
Hayır. Özel modüller pratikte kendi sunucunuza ait bir yetenek — kendi sunucusunda kaydeden özel alanların cloud'da sessizce kaydetmediğine dair bildirimler var ve kendi modülünüzü barındırılan bir hesaba kurmanın bir yolu yok. İhtiyacınız özel kodsa bu, kendi sunucunuza geçmek için doğrudan bir gerekçe ve taşınmanın daha dürüst nedenlerinden biri.
Bize özellik değil rapor lazım. Bu bir modül mü?
Bazen, bazen de bunun yerine bir uygulama almalısınız. Örneğin cari ekstre, App Store'da ücretli bir rapor uygulaması olarak duruyor; ihtiyacınız oysa bize sipariş vermek yerine o uygulamanın parasını vermenizi söylüyoruz ve o satışı almaktansa kaybetmeyi tercih ediyoruz. Raporun gerçekten var olmadığı yerde ise rapor tanımlayan bir modül küçük, ucuz ve sınırları belli bir iş.

Her iyi ürün bir sohbetle başlar.

Canınızı sıkan süreci anlatın. Doğru adres olup olmadığımızı dürüstçe söyleriz — değilsek, kimin olduğunu da.